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

Docker Swarm中Manager与Worker节点连通异常排查求助

解决Docker Swarm跨节点网络不通及Redis连接失败问题

你遇到的是Swarm集群跨节点网络通信的典型问题,直接导致了两个核心现象:Manager节点的webapp容器连不上Worker节点的Redis,且服务访问只能轮询本地节点的容器。下面是针对性的排查和解决步骤:

1. 确认Overlay网络配置正确

你使用的frontend-network标记为外部网络,但如果它是普通Bridge网络而非Swarm专用的Overlay网络,跨节点容器根本无法互通——Swarm必须依赖Overlay网络实现节点间的容器通信。

  • 先删除现有外部网络(如果是普通Bridge):
    docker network rm frontend-network
    
  • 创建Swarm专用的Overlay网络:
    docker network create -d overlay frontend-network
    
  • 修改你的compose文件,移除external: name: frontend-network(或者保留但确保网络是Overlay类型),然后重新部署服务:
    docker stack deploy -c your-compose-file.yml your-stack-name
    

2. 检查Swarm节点间的必备端口是否开放

Swarm集群节点间需要开放以下端口才能建立通信和Overlay网络:

  • 2377/tcp:集群管理端口(用于节点加入、管理命令)
  • 7946/tcp/udp:节点间 gossip 协议通信端口
  • 4789/udp:Overlay网络的VXLAN数据包传输端口

以Ubuntu的ufw防火墙为例,在Manager和Worker节点分别执行:

ufw allow 2377/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp
ufw reload

如果使用iptables,需要确保这些端口的流量被允许通过。

3. 修正Swarm节点的广告IP配置

从你的docker info可以看到:

  • Manager节点地址:10.0.0.1
  • Worker节点地址:192.168.86.38

这两个IP可能处于不同的网络段(比如Manager的10.0.0.1是NAT后的公网IP,Worker是局域网IP),导致节点间无法直接路由。解决方法是:

  • 在Manager节点重新初始化Swarm,指定Worker节点能直接访问的局域网IP:
    docker swarm leave --force
    docker swarm init --advertise-addr 192.168.86.xxx  # 替换为Manager的实际局域网IP
    
  • 获取新的Worker加入命令:docker swarm join-token worker,在Worker节点重新执行加入命令。

4. 确认服务的端口发布模式

你的compose中ports: - "28888:28888"默认使用Swarm的ingress路由网格模式,但如果节点网络不通,路由网格无法工作,导致请求只能打到本地节点的容器。确保:

  • 不要在ports配置中添加mode: host(除非你明确需要主机端口绑定)
  • 重新部署服务后,Swarm的路由网格会自动将请求分发到所有节点的webapp副本

验证步骤

  1. 执行docker network inspect frontend-network,确认网络类型是overlay,且两个节点都在网络的Peers列表中
  2. 在Manager节点执行docker exec -it <manager-webapp-container-id> ping <redis-container-ip>,检查是否能连通
  3. 访问localhost:28888多次,查看返回的Hostname是否包含Worker节点的容器ID,确认负载均衡生效
  4. 查看webapp的返回信息,确认Visits不再提示Redis连接失败

内容的提问来源于stack exchange,提问作者wannamit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:44:32