You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Swarm加入失败:连接无路由到主机故障求助

Docker Swarm Join 报错 no route to host 解决方案

问题背景

  • 目标:创建Docker Swarm集群
  • 环境:
    • 主机A:Ubuntu 23.10
    • 主机B:Mac Sonoma 14.1.2
  • 操作步骤:
    1. 主机A执行:
      docker swarm init
      
    2. 主机B执行:
      docker swarm join --token SWMTKN-1-3o2m78qf57hy2zikfx8p2yc7hrn63edlmlixwrq7bh28xws7zx-9oirn0wh3mbrdui3kcwytl560 192.168.65.9:2377
      
  • 报错信息:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:18:30