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

Docker Swarm中的容器无法相互通信,docker,docker-swarm,Docker,Docker Swarm,我有三个不同的节点,规格如下: 节点A+B:Ubuntu 16.04+Docker 18.03.0-ce基于 节点C:CoreOS stable+Docker 17.12.0-ce 所有人都加入了一个群体,主人a是管理者。节点C由不同的提供者托管在地理位置不同的服务器位置上,但这并不重要,因为我只使用公共IP地址来处理--adversed addr之类的事情 我已确保在所有节点上都处于打开状态。特别是据说集装箱间通信需要端口7946。我可以在所有三个节点之间发送和接收TCP和UDP数据包,也

我有三个不同的节点,规格如下:

  • 节点A+B:Ubuntu 16.04+Docker 18.03.0-ce基于
  • 节点C:CoreOS stable+Docker 17.12.0-ce
所有人都加入了一个群体,主人a是管理者。节点C由不同的提供者托管在地理位置不同的服务器位置上,但这并不重要,因为我只使用公共IP地址来处理
--adversed addr
之类的事情

我已确保在所有节点上都处于打开状态。特别是据说集装箱间通信需要端口
7946
。我可以在所有三个节点之间发送和接收TCP和UDP数据包,也可以从每个节点内的测试容器发送和接收到其他节点

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

现在问题来了:

  • 托管在节点A+B上的容器可以通过覆盖网络相互连接,而不会出现任何问题
  • 承载在A+C或B+C上的容器无法通信。连接只是超时
除了操作系统和docker版本之外,我找不到其他节点之间有任何明显的区别。查看Ubuntu服务器的链接图像,我看到安装了一些工具,比如
pipework
,但我没有配置或使用它。还是Docker Swarm含蓄地使用它


我真的被困在这里了。抱歉,如果这个问题感觉不完整,我只是不知道从哪里开始分析这个问题。如果我需要修改此问题的更多信息,请随时发表评论。

检查您的防火墙设置。他们经常打破docker“网络”套件


确保网络接口docker0能够到达网络进行入站和出站通信。

过了一段时间,我发现了原因:“无法访问”服务器(即使它能够加入swarm)使用了虚拟网络适配器驱动程序
e1000
。将其更改为
virtio
后,一切都像一个符咒


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

在向swarm注册奴隶时,您是否也尝试了
--listen addr
选项(以及
--advision addr
)?如果没有,请这样做,这将告诉swarm manager如何找到从属节点(特别是当您有多个以太网接口时)不确定
--listen addr
,我将尽快测试它。但是,由于所有从机都正确地列在swarm中,并且只有容器到容器的通信失败,我认为这不是经理找不到从机的问题。几个月前我也遇到过同样的问题。在那个里,我可以看到SWARM管理器列出的节点列表,但我面临在docker SWARM上部署服务的问题。试一试。正如我所说的,我已经验证了所有三台服务器之间在文档化端口上的通信是有效的。没有发现任何问题。但是我仍然需要检查docker0接口。尚未显式侦听。您可能会错过docker0接口的出站流量授权。