无法连接到数据库:错误getaddrinfo ENOTFOUND db db:3306

文件结构:

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

我还没有数据库的地方:

在这里输入图像说明

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()我没有得到任何错误,所以问题是我无法连接。 任何帮助表示赞赏,因为这一直花费我所有的时间去debugging和感谢

编辑:

我有一个简单的OriginalScenario文件夹下APP->db->storage与几个空表,但我有同样的问题; 所以我觉得docker-compose up可以为我创build它。

两件事情。 确保你开始时APP->db->storage是空的。 接下来将MYSQL_DATABASE=OriginalScenario添加到您的数据库服务。

当你开始使用mysql时,你需要让DB期望节点服务连接。