Sequelize ERRCONNREFUSED to mysql db in docker compose



在docker compose中启动我的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:

api docker文件

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

通过使用localhost,它将尝试到达容器的localhost

您应该使用服务的名称db

因为compose默认会创建一个桥接网络。你的API容器将能够解析数据库容器的IP地址

改变
host: 'localhost',
port: 3306,
...

host: 'db',
port: 3306,
...

相关内容

  • 没有找到相关文章

最新更新