【发布时间】:2019-10-09 16:18:04
【问题描述】:
我正在尝试让我的 node express docker 容器与我的 mysqldb 容器通信。但是当我查询时,我总是得到:'connect ECONNREFUSED 127.0.0.1:3306'。我做错了什么?
这是我的 docker-compose.yml。它启动了我的两个容器。如果我只使用没有容器的 express,my-api 就可以工作。但不是当它在一个。在docker中运行时,express似乎路由正常,但它不会连接到另一个容器中的数据库。
services:
api:
image: node:8
container_name: my-api
build:
context: .
dockerfile: Dockerfile
command: npm run start
volumes:
- .:/usr/app/
- /usr/app/node_modules
ports:
- "3000:3000"
depends_on:
- mysqldb
expose:
- 3000
environment:
PORT: 3000
REACT_APP_BASE_URL: http://localhost:3000
DB_HOST: localhost
DB_NAME: test
DB_USER: test
DB_PASS: test
mysqldb:
image: mysql:5.7
container_name: mysqldb
command: mysqld --user=root --verbose
volumes:
- ./schemadump.sql:/docker-entrypoint-initdb.d/schemadump.sql
ports:
- "3306:3306"
expose:
- 3306
environment:
MYSQL_DATABASE: "test"
MYSQL_USER: "test"
MYSQL_PASSWORD: "test"
MYSQL_ROOT_PASSWORD: "root"
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
这是我的 docker 文件
FROM node:8
WORKDIR /usr/src/app
COPY ./package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]
这是我的数据库连接文件:
const mysql = require('mysql')
module.exports = function databaseCall (sql) {
const connection = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME
})
...
}
【问题讨论】: