Docker Swarm中的容器无法相互通信

时间:2018-05-09 05:52:30

标签: docker docker-swarm

我有三个不同的节点,其中包含以下规范:

  • 节点A + B:基于this image的Ubuntu 16.04 + Docker 18.03.0-ce。
  • 节点C:CoreOS stable + Docker 17.12.0-ce

所有人都加入了一个群体,主持人A是经理。节点C由不同的提供商托管在地理位置不同的服务器位置,但应该无关紧要,因为我只使用公共IP地址来处理--advertise-addr之类的内容。

我已确保all ports needed for swarm communications在所有节点上都已打开。特别是端口7946据说是集装箱间通信所需要的。 Using netcat我能够在所有三个节点之间以及从每个节点内的测试容器到每个其他节点之间发送和接收TCP和UDP数据包。

任何节点上检查网络会显示相同的结果:列出了所有三个节点。所以Docker Swarm似乎意识到它在任何节点上都是对等的。

现在问题在于:

  • 节点A + B上托管的容器可以通过覆盖网络相互联系而不会出现任何问题
  • 托管在A + C或B + C上的容器可以进行通信。连接只是超时。

我找不到除操作系统和docker版本之外的其他节点之间的任何明显区别。查看Ubuntu服务器的链接图像,我看到有几个工具,如pipework已安装,但我没有配置或使用它。或者Docker Swarm是否隐式使用它?

我真的被困在这里了。很抱歉,如果这个问题不完整,我根本不知道从哪里开始分析问题。如果我应该修改这个问题的进一步信息,请随时发表评论。

2 个答案:

答案 0 :(得分:0)

检查防火墙设置。他们倾向于打破码头和网络"套房经常。

确保网络接口docker0可以通过网络访问入站和出站流量。

答案 1 :(得分:0)

一段时间后,我发现原因:“无法访问”服务器(即使能够加入群组)使用虚拟网络适配器驱动程序e1000。将其更改为virtio后,一切都可以作为魅力。

我希望这可能对任何有同样问题的人有所帮助。