【发布时间】:2020-08-12 17:37:59
【问题描述】:
我的 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"]
docker-compose.yml
version: “2”
services:
web:
build: .
volumes:
— ./:/app
ports:
— “3000:3000”
links:
— mongo
mongo:
image: mongo
ports:
— “27017:27017”
构建命令: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 配置中的
bind_ip?如果不是,那么它只在 localhost 上监听该容器。 -
@NeilLunn 会是什么?
-
顺便说一句,我没有设置任何 MongoDB 配置文件...@NeilLunn
-
默认在
/etc/mongod.conf。您需要绑定到0.0.0.0才能监听“所有”外部接口。深入的“docker”配置也不是我的事,但你似乎正在使用更“传统”的“链接”模式。并且文档似乎建议 "Docker Networks" 作为在容器之间公开端口的首选方法 -
对我来说它很简单:"docker run --network=host myapp:1.0", .. 我的应用连接到了错误的网络。
标签: node.js mongodb docker docker-compose dockerfile