【问题标题】:How to fix 'ECONNREFUSED' error in my nodejs app using docker?如何使用 docker 修复我的 nodejs 应用程序中的“ECONNREFUSED”错误?
【发布时间】:2019-08-29 05:28:36
【问题描述】:

我正在为我的节点应用程序使用 Docker 容器,它是一个 REST API 服务器。它使用多个后端(目前是 mongoDB 和 mysql)。我的 mongoclient 正在连接到我的 docker-compose.yml 中定义的端口,但我的 mysql 没有配置它,抛出 ECONNREFUSED 错误。 我也喜欢在我的本地主机中添加我的系统上安装了 mongodb 和 mysql。 下面是我的Dockerfiledocker-compose.yml的代码

FROM node:8
RUN mkdir -p /home/sharad/eapp
WORKDIR /home/sharad/eapp
COPY package.json /home/sharad/eapp/
RUN npm install
COPY . /home/sharad/eapp
EXPOSE 8016
CMD [ "npm","start" ]
version: '3.1'

services:
  server:
    image: sharadm20/eyantra-app
    restart: always

    ports:
      - 8016:8016

  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: secret

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    links:
      - mongo  
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: secret
      ME_CONFIG_MONGODB_ENABLE_ADMIN: 'true'
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
        - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: secret

  adminer:
    image: adminer
    restart: always
    ports:
      - 8082:8080

下面是我遇到的错误:

Unable to connect to the mysql database: { SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:3306 } 

【问题讨论】:

  • 修复主机名或诗人,或启动数据库。
  • 我在配置文件中更改了端口名称。那行不通。另外我正在使用使用mysql的Adminer并且它正在连接。
  • 尝试连接到 db:3306 而不是 localhost:3306,docker 容器是独立的,需要它们的主机名才能看到彼此,即使它们将端口暴露给主机,你也会有添加从 db 到服务器的链接

标签: mysql node.js docker docker-compose dockerfile


【解决方案1】:

它通过将 mysql 配置中的主机名更改为类似于 docker 映像名称的名称(在我的情况下 mysql 称为 db),因此主机名+端口看起来像 db:3306。

感谢 Marc Sances 指出这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2020-02-18
    • 2021-12-24
    • 2019-12-17
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    相关资源
    最近更新 更多