Docker Swarm加入失败:连接无路由到主机故障求助
Docker Swarm Join 报错
no route to host 解决方案 问题背景
- 目标:创建Docker Swarm集群
- 环境:
- 主机A:Ubuntu 23.10
- 主机B:Mac Sonoma 14.1.2
- 操作步骤:
- 主机A执行:
docker swarm init - 主机B执行:
docker swarm join --token SWMTKN-1-3o2m78qf57hy2zikfx8p2yc7hrn63edlmlixwrq7bh28xws7zx-9oirn0wh3mbrdui3kcwytl560 192.168.65.9:2377
- 主机A执行:
- 报错信息:
Error response from daemon: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 192.168.65.9:2377: connect: no route to host" - 已尝试操作:
- 安装firewalld导致Ubuntu 23.10系统崩溃,放弃使用firewalld
- 用ufw开放端口,但问题未解决
解决步骤
1. 确认主机A的实际可访问IP
192.168.65.9大概率是Docker内部虚拟网卡的IP,而非主机A的局域网实际IP。在主机A执行以下命令查看真实网卡IP:
ip addr show
找到对应网卡(如eth0或wlan0)的inet字段(例如192.168.1.100),这才是主机B需要连接的IP。
2. 完整开放Docker Swarm所需端口
Docker Swarm需要开放3组端口,仅开放2377不足以完成节点通信。在主机A执行:
sudo ufw allow 2377/tcp sudo ufw allow 7946/tcp sudo ufw allow 7946/udp sudo ufw allow 4789/udp sudo ufw reload
执行sudo ufw status verbose确认端口已开放。
3. 验证主机间网络连通性
在主机B上执行以下命令,确认能访问主机A:
- 测试Ping连通性:
ping <主机A实际IP> - 测试2377端口是否可访问:
nc -zv <主机A实际IP> 2377
如果Ping不通,检查两台主机是否在同一局域网,或路由器是否有防火墙规则限制;如果端口不通,回到步骤2确认ufw配置。
4. 重新初始化Swarm并生成正确的Join命令
如果之前用错误IP初始化了Swarm,先重置主机A的Swarm状态,再用实际IP重新初始化:
docker swarm leave --force docker swarm init --advertise-addr <主机A实际IP>
执行后会生成新的docker swarm join命令,复制该命令到主机B执行。
5. Mac主机额外检查
Mac上的Docker运行在虚拟机中,需确认:
- Mac与主机A处于同一局域网,或能通过网络路由访问主机A的IP
- Mac本地防火墙未阻止Docker的出站连接(可临时关闭防火墙测试)
内容的提问来源于stack exchange,提问作者hun1982
相关产品推荐
相关产品推荐

