如何使用docker在我的nodejs应用程序中修复'ECONNREFUSED'错误?

时间:2019-04-08 06:01:55

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

我正在将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 } 

1 个答案:

答案 0 :(得分:0)

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

感谢Marc Sances指出这一点。