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

Mar*_*lho 4 mongodb node.js docker dockerfile docker-compose

我的node.js express app无法连接到Docker中的MongoDB.我对Docker并不熟悉.

node.js连接:

import mongodb from 'mongodb';
...
mongodb.MongoClient.connect('mongodb://localhost:27017', ... );
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM node:argon
RUN mkdir /app
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 3000
CMD ["npm", "start"]
Run Code Online (Sandbox Code Playgroud)

泊坞窗,compose.yml

version: “2”
 services:
  web:
   build: .
   volumes:
     — ./:/app
   ports:
   — “3000:3000”
   links:
    — mongo
   mongo:
    image: mongo
    ports:
      — “27017:27017”
Run Code Online (Sandbox Code Playgroud)

构建命令: 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]'
Run Code Online (Sandbox Code Playgroud)

mes*_*nio 12

尝试:

mongodb.MongoClient.connect('mongodb://mongo:27017', ... );
Run Code Online (Sandbox Code Playgroud)

改变你的docker-compose.yml:

version: "2"

services:

  web:
    build: .
    volumes:
      - ./:/app
    ports:
      - "3000:3000"
    links:
      - mongo

  mongo:
    image: mongo
    ports:
      - "27017:27017"
Run Code Online (Sandbox Code Playgroud)

并使用一些docker compose命令:

docker-compose down
docker-compose build
docker-compose up -d mongo
docker-compose up web
Run Code Online (Sandbox Code Playgroud)


Gid*_*les 6

试试这个.

  1. 使用链接的docker容器时,在这种情况下应使用容器的名称,例如,应该使用与mongodb的连接mongodb.MongoClient.connect('mongodb://mongo:27017', ... );而不是mongodb.MongoClient.connect('mongodb://localhost:27017', ... );.将它更改为mongo的原因是因为你在你的mongo中使用了links属性docker-compose.yml.这将导致您/etc/hosts的Web docker容器中的mongo主机名.引用链接容器.
  2. docker-compose.yml似乎缺乏一个缩进.在mongo属性上应该与web相同.

    version: '2'
    services:
      web:
       build: .
       volumes: ['./:/app']
       ports: [ '3000:3000' ]
       links: [ mongo ]
      mongo:
       image: mongo
       ports: [ '27017:27017' ]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我用我的码头工人,香港专业教育学院做了什么尝试更新你的配置docker-compose.yml,然后我docker-compose build接着docker-compose up.我本地运行的日志