我无法将作为 docker 容器运行的 nodeJS 应用程序连接到 mongoDB。让我解释一下我到目前为止所做的事情:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a3732cc1d90 mongo:3.4 "docker-entrypoint..." 3 weeks ago Up 3 weeks 27017/tcp mongo_live
如您所见,已经有一个 mongo docker 容器在运行。
现在我正在运行我的 nodeJS 应用程序 docker 容器(它是从 meteorJS 构建的):
$ docker run -it 0b422defbd59 /bin/bash
在这个 docker 容器中,我想通过运行来运行应用程序:
$ node main.js
现在我得到了错误
Error: MONGO_URL must be set in environment
我已经尝试通过设置来设置 MONGO_URL:
ENV MONGO_URL mongodb://mongo_live:27017/
但这不起作用:
MongoError: failed to connect to server [mongo_live:27017] on first connect
所以我的问题是如何连接到数据库,据我所知,数据库在运行容器的“外部”。或者我如何为这个容器设置一个新的数据库?
最佳答案
有几种方法可以做到这一点。
在与 mongodb 相同的网络中运行您的应用:
docker run --net container:mongo_live your_app_docker_image # then you can use mongodb in your localhost $ ENV MONGO_URL mongodb://localhost:27017/
你也可以链接两个容器:
docker run --link mongo_live:mongo_live you_app_image .. # Now mongodb is accessible via mongo_live
使用mongodb容器ip地址:
docker inspect -f '{{.NetworkSettings.IPAddress}}' mongo_live # you will get you container ip here $ docker run -it 0b422defbd59 /bin/bash # ENV MONGO_URL mongodb://[ip from previous command]:27017/
您可以将 mongodb 端口绑定(bind)到您的主机,并在您的应用中使用主机的主机名
您可以使用
docker network
并在同一个网络中运行这两个应用程序你可以通过
--add-host mongo_live:<ip of mongo container>
为您的应用程序运行 docker run,然后使用mongo_live
对于mongodb url您也可以使用docker compose让您的生活更轻松 ;)
...
关于node.js - 如何将nodeJS docker容器连接到mongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43962012/