将连接作为docker容器运行的nodeJS应用程序连接到mongoDB时遇到问题。让我解释一下到目前为止我所做的事情:
c, d,d or o
如您所见,已经有一个mongo docker容器正在运行。
现在我正在运行我的nodeJS应用程序docker容器(这是meteorJS的构建):
$ 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
在这个docker容器中,我想运行以下命令来运行应用程序:
$ docker run -it 0b422defbd59 /bin/bash
现在我收到了错误
$ node main.js
我已经尝试通过设置:
来设置MONGO_URLError: MONGO_URL must be set in environment
但这不起作用:
ENV MONGO_URL mongodb://mongo_live:27017/
所以我的问题是如何连接到数据库,据我所知 - 在运行容器的“外部”。另外,如何为此容器设置新数据库?
答案 0 :(得分:9)
有几种方法可以做到。
在与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端口绑定到主机并在应用中使用主机的主机名
您可以使用docker network
并在同一网络中运行这两个应用
您可以将--add-host mongo_live:<ip of mongo container>
传递给针对您的应用的docker run,然后将mongo_live
用于mongodb url
您还可以使用docker compose让您的生活更轻松;)
...
答案 1 :(得分:1)
当您运行容器时,每个容器都在独立的网络中工作。因为一个容器不能连接到其他点对点。
有三种连接容器的方法
127.0.0.1 mongo_live
上添加主机ile(这是最简单的方式)将mongodb添加到应用程序容器中并非停泊方式。
答案 2 :(得分:0)
请使用以下代码段为您的docker-compose.yml文件,将评论替换为您的实际值。应该解决你的问题。
version: '2'
services:
db:
build: <image for mongoDB>
ports:
- "27017:27017" # whatever port u r using
environment:
#you can specify mondo db username and stuff here
volumes:
- #load default config for mondodb from here
- "db-data-store:/data/db" # path depends on which image you use
networks:
- network
nodejs:
build: #image for node js
expose:
- # mention port for nodejs
volumes:
- #mount project code on container
networks:
- network
depends_on:
- db
networks:
network:
driver: bridge
请使用以下链接作为参考:
1)NodeJs Docker
2)MongoDb docker
3)docker-compose tutorial
最好的运气