【问题标题】:Containers in Docker Swarm unable to communicate with each otherDocker Swarm 中的容器无法相互通信
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 正如我所说,我已验证记录的端口上的通信在所有三台服务器之间都有效。在那里没有发现任何问题。但是我仍然需要检查 docker0 接口。尚未明确收听。
  • 您可能会错过 docker0 接口的出站流量授权。
【解决方案2】:

一段时间后我找到了原因:“无法访问”的服务器(即使它能够加入集群)使用了虚拟网络适配器驱动程序e1000。将其更改为virtio 后,一切都像魅力一样。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-28
    • 2018-10-17
    • 2022-11-10
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    相关资源
    最近更新 更多