无法通过Docker中的node.js连接到MongoDB

我的node.js express应用程序无法连接到Docker中的MongoDB。 我不熟悉Docker。

node.js连接:

import mongodb from 'mongodb'; ... mongodb.MongoClient.connect('mongodb://localhost:27017', ... ); 

Dockerfile:

 FROM node:argon RUN mkdir /app WORKDIR /app COPY package.json /app RUN npm install COPY . /app EXPOSE 3000 CMD ["npm", "start"] 

泊坞窗,compose.yml

 version: “2” services: web: build: . volumes: — ./:/app ports: — “3000:3000” links: — mongo mongo: image: mongo ports: — “27017:27017” 

构build命令: docker build -t NAME .

运行命令: docker run -ti -p 3000:3000 NAME

连接错误:

 [MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]] name: 'MongoError', message: 'failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]' 

尝试:

 mongodb.MongoClient.connect('mongodb://mongo:27017', ... ); 

更改您docker-compose.yml

 version: "2" services: web: build: . volumes: - ./:/app ports: - "3000:3000" links: - mongo mongo: image: mongo ports: - "27017:27017" 

并使用一些docker工具撰写命令:

 docker-compose down docker-compose build docker-compose up -d mongo docker-compose up web 

尝试这个。

  1. 当使用链接的Docker容器时,应该使用容器的名字,例如你的连接mongodb应该是mongodb.MongoClient.connect('mongodb://mongo:27017', ... ); 而不是mongodb.MongoClient.connect('mongodb://localhost:27017', ... ); 。 将其更改为mongo的原因是因为您在docker-compose.yml使用了链接属性mongo。 这将导致您的/etc/hosts的泊坞窗容器中的mongo主机名。 引用链接容器 。
  2. docker-compose.yml似乎缺less一个缩进。 mongo属性应该和web一样。

     version: '2' services: web: build: . volumes: ['./:/app'] ports: [ '3000:3000' ] links: [ mongo ] mongo: image: mongo ports: [ '27017:27017' ] 
  3. 我试过你的configuration使用我的docker我所做的是更新docker-compose.yml然后我docker-compose build然后docker-compose up 。 我本地运行的日志