我对docker很陌生,但我遇到一些问题,让节点应用程序连接到在单独容器上运行的mongo数据库。
我正在使用official mongo image
我使用以下方式运行:
docker run --name some-mongo --network-alias some-mongo -d mongo
默认情况下,它在端口27017上运行。我可以使用mongo shell连接到它:
mongo --host mongodb://172.17.0.2:27017
但我无法通过名字
连接到它mongo --host mongodb://some-mongo:27017
MongoDB shell version: 3.2.19
connecting to: mongodb://some-mongo:27017/test
2018-05-07T17:23:20.813-0400 I NETWORK [thread1] getaddrinfo("some-mongo") failed: Name or service not known
2018-05-07T17:23:20.813-0400 E QUERY [thread1] Error: couldn't initialize connection to host some-mongo, address is invalid :
connect@src/mongo/shell/mongo.js:223:14
@(connect):1:6
exception: connect failed
相反,我收到有关如何连接到mongo主机的错误消息:
我正在尝试一些码头撰写教程,但要么他们太简单了,要么他们似乎不适合我。我只想将自定义节点应用程序(不是官方节点)连接到mongodb和其他一些依赖项。
答案 0 :(得分:2)
您必须通过将端口传递到主机来运行容器:
docker run -p 27017:27017 --name some-mongo --network-alias some-mongo -d mongo
然后您可以从主机连接 MongoDB :
如果您不想这样做,可以通过docker container命令连接到mongo
docker exec -it some-mongo mongo
答案 1 :(得分:1)
您的方法并未改变主机的系统配置,因此mongo
服务将无法使用。同意@ unm4sk,您应该将应用程序的服务组合成一个单独的撰写文件,如下所示:
version: '2'
services:
mongo:
image: mongo
expose:
- "27017"
[...]
service_utilizing_mongo:
[...]
links:
- mongo:mongo
然后,您的service_utilizing_mongo
会有一个DNS条目,使该服务能够通过默认mongo
上的别名mongo
访问您的27017
服务端口。