从 docker 容器连接到本地 mongodb

新手上路,请多包涵

我有一个在 mongodb://127.0.0.1:27017 上运行的本地 mongoDB 服务器。我的数据库名称是 localv2 。我有一个带有 Dockerfile 的 node/express 应用程序,如下所示:

 FROM node:7.5

RUN npm install -g pm2

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app
RUN npm install

COPY . /usr/src/app

EXPOSE 3002

ENV NODE_ENV local

CMD pm2 start --no-daemon server.js

server.js 文件使用以下代码连接到本地 mongodb:

 app.db = mongoose.connect("mongodb://127.0.0.1:27017/localv2", options);

当我从使用上面的 Dockerfile 创建的图像启动容器时,这不起作用。我在某处读到 Docker 创建了一个具有自己网关 IP 地址的 VLAN。当我 docker inspect 我的容器,我的网关IP地址:172.17.0.1。

即使将 mongodb 连接更改为

app.db = mongoose.connect("mongodb://172.17.0.1:27017/localv2", options)

并重新构建图像并启动一个新容器,我仍然得到错误:

 MongoError: failed to connect to server [172.17.0.1:27017] on first connect [MongoError: connect ECONNREFUSED 172.17.0.1:27017]

运行容器的命令: docker run -p 3002:3002 image-name

请帮忙。

原文由 chaudharyp 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 804
1 个回答

在适用于 Mac 的 Docker 上,如果您的 mongo 在本地主机上运行,则可以使用 host.docker.internal 。您可以在 mongo 主机的环境变量中读取您的代码,并将其设置在 Dockerfile 中,如下所示:

ENV MONGO_HOST "host.docker.internal"

有关 https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds 的更多详细信息,请参见此处

原文由 airpower44 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题