【发布时间】:2018-06-01 18:11:57
【问题描述】:
我有三个不同的节点,具有以下规格:
- 节点 A + B:Ubuntu 16.04 + Docker 18.03.0-ce 基于this image。
- 节点 C:CoreOS 稳定版 + Docker 17.12.0-ce
所有人都加入了一个集群,主机 A 是管理器。节点 C 由不同的提供商托管在地理位置不同的服务器位置,但这应该无关紧要,因为我只将公共 IP 地址用于 --advertise-addr 之类的东西。
我确保all ports needed for swarm communications 在所有节点上都打开。特别是端口7946 据说是容器间通信所必需的。 Using netcat 我能够在所有三个节点之间发送和接收 TCP 和 UDP 数据包,也可以从每个节点内的测试容器到其他节点。
检查 any 节点上的网络显示了相同的结果:列出了所有三个节点。所以 Docker Swarm 似乎可以感知任何节点上的对等节点。
现在问题来了:
- 节点 A + B 上托管的容器可以通过覆盖网络相互访问,没有任何问题
- 托管在 A + C 或 B + C 上的容器不能通信。连接超时。
除了操作系统和docker版本之外的节点我找不到任何明显的区别。查看Ubuntu服务器的链接图,看到安装了pipework等几个工具,但我没有配置也没有使用。还是 Docker Swarm 隐式使用它?
我真的被困在这里了。对不起,如果这个问题感觉不完整,我根本不知道从哪里开始分析这个问题。如果我应该对此问题修改更多信息,请随时发表评论。
【问题讨论】:
-
在将奴隶注册到 swarm 时,您是否也尝试过
--listen-addr选项(以及--advertise-addr)?如果没有,请这样做,这将告诉集群管理器如何找到从节点(特别是当您有多个以太网接口时) -
不确定
--listen-addr,我会尽快测试。但是由于所有的 slave 都正确地列在了 swarm 中,只有容器到容器的通信失败,我不认为是 manager 没有找到 slave 的问题。 -
几个月前我也遇到过同样的情况。我可以通过 SWARM Managers 查看节点列表,但在 docker-swarm 上部署服务时遇到了问题。试一试。
标签: docker docker-swarm