我无法通过其名称连接到我的mongo docker容器

时间:2018-05-07 21:26:25

标签: node.js mongodb docker

我对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和其他一些依赖项。

2 个答案:

答案 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服务端口。