[英]How to connect nodeJS docker container to mongoDB
我在将作为 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端口绑定到主机,并在应用程序中使用主机的主机名
您可以使用docker network
并在同一网络中运行这两个应用程序
您可以将--add-host mongo_live:<ip of mongo container>
传递给您的应用程序的mongo_live
运行,然后使用mongo_live
作为mongodb url
您还可以使用docker compose让您的生活更轻松;)
...
当您运行容器时,每个容器都在独立网络中工作。 因为一个容器不能连接到其他点对点。
有三种连接容器的方法
127.0.0.1 mongo_live
上添加主机ile 127.0.0.1 mongo_live
( 这是最简单的方法 ) 将mongodb添加到应用程序容器不是docker方式。
请使用以下代码段为您的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教程
最好的运气
我在如何将我的 server.js 连接到 mongodb 时遇到问题。这就是我解决它的方法,希望你觉得它有用。 点击获取我的截图
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.