我在将作为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
$ ENV MONGO_URL mongodb://localhost:27017/
您也可以链接两个容器:
docker run --link mongo_live:mongo_live you_app_image ..
使用mongodb容器的IP地址:
docker inspect -f '{{.NetworkSettings.IPAddress}}' mongo_live
您可以将mongodb端口绑定到主机,并在应用程序中使用主机的主机名
您可以docker network在同一网络中使用和运行两个应用程序
docker network
您可以传递--add-host mongo_live:<ip of mongo container>给应用程序的docker run,然后mongo_live用于mongodb url
--add-host mongo_live:<ip of mongo container>
mongo_live
您还可以使用docker compose使您的生活更轻松;)
…