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

如何让Docker Swarm worker节点通过路由网格转发流量到manager服务

核心疑问确认

即使worker节点没有对应服务的镜像,也完全可以通过Swarm的ingress路由网格将请求转发到manager节点上运行的服务实例,这是Swarm路由网格的原生能力,不需要worker节点本地存在服务镜像、也不需要在worker节点上运行服务副本。


故障排查与配置修改步骤

按优先级依次检查调整以下配置即可解决worker节点无法转发流量的问题:

1. 开放Swarm集群必要通信端口

Swarm路由网格、节点间通信依赖以下端口必须在manager和worker两个节点的系统防火墙、云服务商安全组中全部放行,绝大多数转发失败问题都是端口未开放导致的:

  • TCP 2377:集群管理通信
  • TCP/UDP 7946:节点间gossip状态同步
  • UDP 4789:overlay网络VXLAN数据传输

2. 检查ingress网络状态

执行以下命令确认worker节点已正常接入Swarm内置的ingress网络:

docker network inspect ingress

如果输出的Peers字段中没有worker节点的信息,或者网络状态异常,按以下步骤重建ingress网络:

# 先删除现有服务栈
docker stack rm minecraft
# 删除异常的ingress网络
docker network rm ingress
# 重建加密的ingress overlay网络
docker network create --driver overlay --ingress --opt encrypted=true ingress
# 重新部署你的Minecraft服务栈

3. 调整服务网络配置

你的服务当前仅加入了自定义的minecraft-net网络,可显式将ingress网络也加入服务的网络列表,确保路由网格可以正常访问服务:
修改minecraft.yml配置如下:

version: '3.7'

services:
    crafty-controller:
        image: crafty-controller
        ports:
          # 如果你需要使用Minecraft默认端口连接,建议显式指定映射,避免自动分配高位端口
          # 例如你要开放25565端口就写:- "25565:25565"
          - "25500-25600"
          - "13121:13121"
        volumes:
          - ./minecraft/docker/minecraft_servers:/minecraft_servers
          - ./minecraft/docker/db:/crafty_db
          - /mnt/minecraft-backups:/crafty_web/backups
        networks:
            - minecraft-net
            - ingress # 新增ingress网络
        deploy:
            placement:
                constraints:
                  - node.labels.minecraft == main

networks:
    minecraft-net:
        external: true
    ingress: # 新增ingress网络的外部声明
        external: true

4. 检查端口占用

确认worker节点上的13121端口、以及服务自动映射的30000-30100段端口没有被其他进程占用,端口占用会导致路由网格无法监听对应端口,转发失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:15:05