将 ERRCONNREFUSED 序列化到 mysql db in docker compose
Sequelize ERRCONNREFUSED to mysql db in docker compose
在 docker 中启动我的 api/app/db 时,api 无法连接到 mysql 容器。
docker-compose.yml
version: "3.8"
services:
web:
build:
context: ./frontend
dockerfile: Dockerfile-dev
container_name: vue-ui-v2
volumes:
- ./frontend:/usr/src/app/ui
- /usr/src/app/ui/node_modules
ports:
- "8080:8080"
depends_on:
- api
api:
build:
context: ./backend
dockerfile: Dockerfile-dev
ports:
- "4000:4000"
container_name: node-api-v2
volumes:
- ./backend:/usr/src/app/api
- /usr/src/app/api/node_modules
depends_on:
- db
db:
image: mysql:8.0
cap_add:
- SYS_NICE
restart: always
environment:
- MYSQL_DATABASE=thebooks
- MYSQL_ROOT_PASSWORD=defaultPassword
ports:
- '3306:3306'
volumes:
- db:/var/lib/mysql
volumes:
db:
docker 文件 api
FROM node:12
WORKDIR /usr/src/app/api
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 4000
CMD [ "npm", "run", "start" ]
并连接来自 sequelize 的调用:
const sequelize = new Sequelize('thebooks', 'root', 'defaultPassword', {
host: 'localhost',
port: 3306,
dialect: 'mysql'
});
我觉得一定有一些简单的东西我错过了,但我已经挠头好几个小时试图遵循这个:https://www.bezkoder.com/docker-compose-nodejs-mysql/ 几个小时都失败了。
您正在尝试连接到 localhost
通过使用本地主机,它将尝试访问容器的本地主机
您应该改用服务名称 db
因为 compose 会默认创建一个桥接网络。您的API容器将能够通过服务
的名称解析数据库容器IP
改变
host: 'localhost',
port: 3306,
...
到
host: 'db',
port: 3306,
...
在 docker 中启动我的 api/app/db 时,api 无法连接到 mysql 容器。
docker-compose.yml
version: "3.8"
services:
web:
build:
context: ./frontend
dockerfile: Dockerfile-dev
container_name: vue-ui-v2
volumes:
- ./frontend:/usr/src/app/ui
- /usr/src/app/ui/node_modules
ports:
- "8080:8080"
depends_on:
- api
api:
build:
context: ./backend
dockerfile: Dockerfile-dev
ports:
- "4000:4000"
container_name: node-api-v2
volumes:
- ./backend:/usr/src/app/api
- /usr/src/app/api/node_modules
depends_on:
- db
db:
image: mysql:8.0
cap_add:
- SYS_NICE
restart: always
environment:
- MYSQL_DATABASE=thebooks
- MYSQL_ROOT_PASSWORD=defaultPassword
ports:
- '3306:3306'
volumes:
- db:/var/lib/mysql
volumes:
db:
docker 文件 api
FROM node:12
WORKDIR /usr/src/app/api
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 4000
CMD [ "npm", "run", "start" ]
并连接来自 sequelize 的调用:
const sequelize = new Sequelize('thebooks', 'root', 'defaultPassword', {
host: 'localhost',
port: 3306,
dialect: 'mysql'
});
我觉得一定有一些简单的东西我错过了,但我已经挠头好几个小时试图遵循这个:https://www.bezkoder.com/docker-compose-nodejs-mysql/ 几个小时都失败了。
您正在尝试连接到 localhost
通过使用本地主机,它将尝试访问容器的本地主机
您应该改用服务名称 db
因为 compose 会默认创建一个桥接网络。您的API容器将能够通过服务
的名称解析数据库容器IP改变
host: 'localhost',
port: 3306,
...
到
host: 'db',
port: 3306,
...