Docker Swarm集群部署报错:connect: no route to host求助
Docker Swarm Join失败问题排查方案
1. 先搞清楚4789端口的情况
Docker Swarm的VXLAN overlay网络依赖UDP 4789端口,但netstat -tulpn | grep LISTEN查不到UDP端口的监听状态(这个命令只显示TCP的监听)。你可以在主节点D1执行:
sudo ss -ulpn | grep 4789
如果没结果,大概率是Swarm初始化时绑定了错误的地址。重新初始化Swarm,指定节点的真实外部IP:
sudo docker swarm init --advertise-addr <D1的实际网卡IP> --listen-addr <D1的实际网卡IP>:2377
别用localhost或127.0.0.1,必须用其他节点能访问到的IP。
2. 实打实验证端口连通性
哪怕你说没防火墙限制,也手动测一遍:
- 在D2/D3上执行
telnet <D1的IP> 2377,连不上的话,按下面步骤排查:- 彻底关闭firewalld:
sudo systemctl stop firewalld && sudo systemctl disable firewalld - 清空iptables规则:
sudo iptables -F && sudo iptables -X - 检查SELinux状态:
getenforce,如果是Enforcing,临时关了试试:sudo setenforce 0,要永久改就编辑/etc/selinux/config把SELINUX改成disabled
- 彻底关闭firewalld:
3. 核对Swarm配置和Join Token
- 在主节点执行
docker info,看Swarm部分的Advertise Address是不是正确的外部IP,别是回环地址。 - 重新生成worker节点的join命令:
sudo docker swarm join-token worker,直接复制完整命令到D2/D3执行,避免手动输错token或IP。
4. 检查基础网络连通性
- 所有节点执行
ip addr,确认网卡IP和Swarm初始化用的IP一致,别绑定到了错误的网卡(比如只绑了lo接口)。 - 在D2/D3上ping D1的IP,ping不通的话先解决基础网络问题,比如子网、网关配置。
5. 重启Docker试试
所有节点执行:
sudo systemctl restart docker
然后主节点重新初始化Swarm,再让D2/D3执行join命令。
内容的提问来源于stack exchange,提问作者Boodle
相关产品推荐
相关产品推荐

