Docker Swarm服务:MongoDB连接

时间:2018-12-20 03:33:06

标签: mongodb docker docker-swarm

我正在试验docker swarm。我在尝试设置mongodb集群时遇到了这个问题。 我创建了一个由3个节点组成的集群。我在每个节点中启动了3个mongodb服务(mongo1,mongo2,mongo3)。所有服务都在称为mongo的同一网络中。我无法从另一个mongo服务连接到任何其他mongo服务。

mongo_client=556a565e88d1
docker exec -it $mongo_client mongo mongo1/foo
docker exec -it $mongo_client mongo mongo2/foo
docker exec -it $mongo_client mongo mongo3/foo

以上mongo命令无法连接。根据错误消息,我知道每个主机名mongo1, mongo2, mongo3都可以正确解析。我可以在错误消息中看到IP地址为10.0.0.2:27017, 10.0.0.36:27017 & 10.0.0.40:27017

示例错误:

MongoDB shell version: 3.2.21
connecting to: mongo3/foo
2018-12-20T02:45:05.042+0000 W NETWORK  [thread1] Failed to connect to 10.0.0.40:27017, in(checking socket for error after poll), reason: errno:111 Connection refused
2018-12-20T02:45:05.043+0000 E QUERY    [thread1] Error: couldn't connect to server mongo3:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:231:14
@(connect):1:6

exception: connect failed

我无法理解原因。我可以从端口27017上的同一容器连接到mongo,它可以正常工作。但是,当我尝试使用10.0.0.2:27017连接时,它失败了。

可能是mongod仅在本地主机地址上侦听。我关注了this article。在此提到,与mongo的连接基于服务名称。如果在任何其他端口上监听mongod,那么本文中就会提到它。

更新

我检查了运行mongod的容器的IP地址。它是10.0.0.44,而服务名称则解析为10.0.0.43。我可以看到容器IP与服务IP之间的区别。 我尝试使用来自同一网络中另一个容器的容器IP连接到mongod,它起作用了。

这表明同一覆盖网络中的容器能够使用IP地址相互通信。但是,如何使用服务名称连接到mongod?

任何有关此问题的说明将是有益的。

谢谢!

0 个答案:

没有答案