2017-08-16 1112 views
1

文件結構:無法連接到數據庫:錯誤的getaddrinfo ENOTFOUND DB DB:3306

APP 
├─ API 
│ └─ Dockerfile.yml 
├─ db 
│ └─ storage 
└─ docker-compose.yml 

如果我沒有數據庫尚未:

enter image description here

Dockerfile.yml:

# Base node image 
FROM node:8.2.1 

# ON DOCKER CONTAINER 
WORKDIR /API 

# Install nodemon to monitor changes to the app. 
RUN npm install -g nodemon 

COPY package.json /API/package.json 
RUN npm install && npm ls 
RUN mv /API/node_modules /node_modules 

# Stick current directory in the container's app directory 
COPY . /API 

# Change the user to 'node' 
USER node 

# Run the command 
CMD ["node", "index.js"] 

泊塢窗,compose.yml:

version: "3" 

services: 
    web: 
    build: ./API 
    command: nodemon --inspect=0.0.0.0:5858 
    volumes: 
     - ./API:/API 
    ports: 
     - "3000:3000" 
     - "5858:5858" 
    networks: 
     - webnet 
    db: 
    image: mysql 
    environment: 
     MYSQL_ROOT_PASSWORD: example 
    volumes: 
     - ./db/storage:/var/lib/mysql 
    ports: 
     - "3306:3306" 
    networks: 
     - webnet 
networks: 
    webnet: 

index.js:

const express = require('express'); 
const mysql = require('mysql'); 
const app = express(); 

var connection = mysql.createConnection({ 
    host  : 'db', 
    user  : 'root', 
    password : 'example', 
    database : 'OriginalScenario' 
}); 

app.listen(3000, function() { 
    console.log('Server is up and running. Listening on 127.0.0.1:3000!') 
    connection.connect(); 
}) 

當我在命令行中運行docker-compose up --build,我得到這個:

Successfully built 29aa0ae16e2e 
Successfully tagged APP_web:latest 
Starting APP_web_1 ... 
Starting APP_db_1 ... 
Starting APP_web_1 
Starting APP_web_1 ... done 
Attaching to APP_db_1, APP_web_1 
db_1 | Initializing database 
db_1 | 2017-08-16T21:17:53.855569Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see document 
ation for more details). 
db_1 | 2017-08-16T21:17:53.860792Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting. 
db_1 | 2017-08-16T21:17:53.860935Z 0 [ERROR] Aborting 
db_1 | 
web_1 | [nodemon] 1.11.0 
web_1 | [nodemon] to restart at any time, enter `rs` 
web_1 | [nodemon] watching: *.* 
web_1 | [nodemon] starting `node --inspect=0.0.0.0:5858 routes.js` 
APP_db_1 exited with code 1 
web_1 | Debugger listening on ws://0.0.0.0:5858/96f3e80c-55af-4a4b-a9ea-217203ffbebc 
web_1 | For help see https://nodejs.org/en/docs/inspector 
web_1 | Server is up and running. Listening on 127.0.0.1:3000! 
web_1 | events.js:182 
web_1 |  throw er; // Unhandled 'error' event 
web_1 |  ^
web_1 | 
web_1 | Error: getaddrinfo ENOTFOUND db db:3306 
web_1 |  at errnoException (dns.js:50:10) 
web_1 |  at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26) 
web_1 |  -------------------- 
web_1 |  at Protocol._enqueue (/API/node_modules/mysql/lib/protocol/Protocol.js:145:48) 
web_1 |  at Protocol.handshake (/API/node_modules/mysql/lib/protocol/Protocol.js:52:23) 
web_1 |  at Connection.connect (/API/node_modules/mysql/lib/Connection.js:130:18) 
web_1 |  at Server.<anonymous> (/API/routes.js:29:14) 
web_1 |  at Object.onceWrapper (events.js:314:30) 
web_1 |  at emitNone (events.js:105:13) 
web_1 |  at Server.emit (events.js:207:7) 
web_1 |  at emitListeningNT (net.js:1346:10) 
web_1 |  at _combinedTickCallback (internal/process/next_tick.js:135:11) 
web_1 |  at process._tickCallback (internal/process/next_tick.js:180:9) 
web_1 | [nodemon] app crashed - waiting for file changes before starting... 

如果我刪除connection.connect()我沒有得到任何錯誤,所以問題是我無法連接。任何幫助表示讚賞,因爲這已採取所有的時間來調試和感謝

編輯:

我做了一個簡單的文件夾OriginalScenarioAPP->db->storage夫婦空表之下,但我有同樣的問題;所以我覺得docker-compose up可能會爲我創建它。

回答

1

兩件事。確保你在開始時APP->db->storage爲空。接下來將MYSQL_DATABASE=OriginalScenario添加到您的數據庫服務。

當你開始使用mysql時,你需要讓DB期待節點服務的連接。