【问题标题】:[SequelizeConnectionRefusedError]: connect ECONNREFUSED 127.0.0.1:3306. using sequelize in docker [duplicate][SequelizeConnectionRefusedError]: connect ECONNREFUSED 127.0.0.1:3306. using sequelize in docker [duplicate]
【发布时间】:2022-01-11 16:09:36
【问题描述】:

我是 docker 新手。我试图找到与我相同的其他解决方案,但它根本不起作用。 当运行 docker compose up 时,它响应连接错误。这是我的完整代码Link

错误

错误号:-111,服务器-api-1 |代码:'ECONNREFUSED',server-api-1 | 系统调用:'connect',server-api-1 |地址:'127.0.0.1', 服务器-api-1 |端口:3306,服务器-api-1 |致命:真实 服务器-api-1 | },服务器-api-1 |原文:错误:连接 ECONNREFUSED 127.0.0.1:3306 server-api-1 |在 TCPConnectWrap.afterConnect [as oncomplete] (node:net:1161:16) { 服务器-api-1 |错误号:-111,服务器-api-1 |代码: 'ECONNREFUSED',服务器-api-1 |系统调用:'connect',server-api-1 |地址:'127.0.0.1',server-api-1 |端口:3306, 服务器-api-1 |致命:真正的 server-api-1 |服务器-api-1 | }

config.json

{
  "development": {
    "username": "root",
    "password": "Password",
    "database": "vc_chat",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

Dockerfile

FROM node:16-alpine

WORKDIR /app/server
ADD server /app/server
RUN npm install


COPY . .


CMD [ "npm", "start" ]

docker-compose.yml

version: "3.9"

services:
  # Mysql
  mysql_db:
    container_name: db_container
    image: mysql:latest
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_DATABASE: "vc_chat"
      MYSQL_USER: "root"
      MYSQL_PASSWORD: "Password"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      DB_HOSTNAME: mysql
    volumes:
      - mysql_db:/var/lib/mysql

  api:
    build: .
    ports:
      - 4000:4000
    environment:
      - EMAIL= "test@gmail.com"
      - PASSWORD= "test123"
      - JWT_SECRET= "DENNY"
    depends_on:
      - mysql_db
volumes:
  mysql_db: {}

【问题讨论】:

    标签: node.js docker sequelize.js


    【解决方案1】:

    您不能在 docker 上下文中使用 127.0.0.1 (localhost),因为每个容器都会将其视为自身内部。运行 docker-compose 时,服务将进入同一个 docker 网络。在那个 docker 网络中,服务可以通过 contianer 名称访问,

    所以数据库应该可以在 db_container:3306 访问 (意思是,您必须在 config.json 中更改 db 主机的配置)

    【讨论】: