node.js - 从 docker 容器连接到本地 mongodb

标签 node.js mongodb docker mongoose dockerfile

我有一个本地 mongoDB 服务器在 mongodb://127.0.0.1:27017 上运行。我的数据库名称是 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

请帮忙。

最佳答案

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

ENV MONGO_HOST "host.docker.internal"

查看此处了解更多详情 https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds

关于node.js - 从 docker 容器连接到本地 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43800164/

相关文章:

mongodb - 如何将 MongoDB 作为 Windows 服务运行?

Mongodb:在 collection.aggregate() 期间忽略大型文档(BSON > 16 MB)

docker - 在 Centos 7 上安装 GNOME 桌面最小 : Docker image

selenium - 如何使用可变端口(4444)创建 Selenium /独立 Chrome 图像

javascript - Sequelize 使用 [Op.or] 查询父模型和包含的模型

node.js - 云函数 : how to upload additional file for use in code?

angularjs - Karma-Coverage 和 Istanbul HTML 报告未输出到预期目录

JavaScript (Node.js) : app. 设置 ('port' ,端口); ^ TypeError : app. set 不是一个函数

MongoDB 的 NumberLong 只有 54 位签名?

docker - 如何为 docker 容器分配多个静态 IP