Docker Swarm节点加入时出现的本地IP地址错误 – 未知端口

57次阅读
没有评论

问题描述

在使用Docker Swarm时遇到了一个问题。他的设置如下:
在同一网络中有三台主机:
– 主机A – SLES
– 主机B – Ubuntu
– 主机C – Ubuntu

下面的操作是有效的:
1. 在主机A上初始化Swarm。
2. 在主机B上加入Swarm,并将其设置为管理节点。

但是,以下操作无法正常工作:
1. 在主机C上使用从主机A生成的令牌加入Swarm作为工作节点。
2. 在主机C上使用从主机B生成的令牌加入Swarm作为工作节点。

在这两种情况下,都会出现相同的错误:

Error response from daemon: could not find local IP address: dial udp: address udp/2377​: unknown port

用户对这条错误信息的含义感到困惑,希望能够得到解决。

解决方案

以下方案可能会涉及系统配置和网络设置,请在操作前做好备份,并注意版本差异。

验证端口通信

根据Docker Swarm的要求,主机之间必须开放一些端口以确保正常的通信。你可以使用nc命令(也称为netcat)来验证主机之间这些关键端口是否可以通信。

在主机A上执行以下命令:

nc -zv HOST_B_IP_ADDRESS 2377,4789,7946
nc -zv HOST_C_IP_ADDRESS 2377,4789,7946

在主机B上执行以下命令:

nc -zv HOST_A_IP_ADDRESS 2377,4789,7946
nc -zv HOST_C_IP_ADDRESS 2377,4789,7946

在主机C上执行以下命令:

nc -zv HOST_A_IP_ADDRESS 2377,4789,7946
nc -zv HOST_B_IP_ADDRESS 2377,4789,7946

根据Docker的文档,在主机之间开放这些端口是确保Docker Swarm正常工作的关键。如果其中一个端口在主机之间不可用,可能会导致类似的错误。如果出现问题,你需要检查是否有其他应用程序占用了这些端口,或者检查防火墙配置。

确保端口未被占用

当出现类似错误时,有可能是某些应用程序占用了Docker Swarm所需的端口。你可以通过以下步骤检查端口占用情况:

  1. 在每台主机上,使用netstat命令查看端口占用情况:
    bash
    netstat -tuln | grep -E "2377|4789|7946"

  2. 如果发现这些端口已经被其他应用程序占用,你可以考虑停止或迁移这些应用程序,以便Docker Swarm可以使用这些端口。

防火墙配置检查

防火墙配置也可能影响到Docker Swarm的正常通信。确保防火墙允许Docker Swarm所需的端口通过。你可以按照以下步骤检查防火墙配置:

  1. 检查防火墙状态:
    bash
    systemctl status firewalld # For CentOS/RHEL
    sudo ufw status # For Ubuntu

  2. 如果防火墙处于活动状态,确保这些端口被允许通过。你可以使用以下命令开放端口(以CentOS/RHEL为例):
    bash
    firewall-cmd --permanent --add-port=2377/tcp
    firewall-cmd --permanent --add-port=4789/tcp
    firewall-cmd --permanent --add-port=7946/tcp
    firewall-cmd --reload

验证NAT配置

有时候,错误可能与网络地址转换(NAT)有关。你可以检查是否存在NAT规则可能导致问题。确保NAT规则不会影响Docker Swarm通信。

检查DNS解析

在一些情况下,DNS解析问题可能导致主机无法解析彼此的名称。确保主机名能够正确解析为IP地址,以便Docker Swarm可以使用这些地址进行通信。

检查网络连接性

最后,确保所有主机都能够相互通信。你可以使用ping命令测试主机之间的网络连接性。

总结

Docker Swarm错误信息 “could not find local IP address: dial udp: address udp/2377​: unknown port” 可能是由于网络通信问题导致的。你需要验证端口通信、端口占用情况、防火墙配置以及网络连接性,以确保Docker Swarm在主机之间能够正常工作。

如果问题仍然存在,你可能需要进一步调查网络和主机配置,或者查阅更多关于Docker Swarm的文档和解决方案。

正文完