Docker Swarm 与 2377 端口
2377 是 Swarm 集群管理端点的端口,管理节点通过它处理集群管理指令与节点加入请求。除了 2377,集群还必须放行节点发现所需的 7946(TCP 与 UDP)以及覆盖网络数据面所需的 4789(UDP),少数场景还会用到 4789 之外的封装端口。只放行 2377 会导致节点能加入但容器之间跨主机不通,这类问题在排查时容易被误判为应用故障。
基本信息
| 服务 | Swarm 集群管理端点 |
|---|---|
| 协议 | TCP |
| 必备放行 | 2377 管理、7946 节点发现、4789 覆盖网络数据面 |
| 用途 | 节点加入与退出、集群管理指令、服务编排 |
| 凭据形式 | 加入令牌(管理节点与工作节点两种) |
| 安全等级 | 仅集群内网可达 |
典型使用场景
- 多主机编排:把若干台主机组成集群统一调度服务
- 滚动升级:按服务维度逐步替换容器,减少停机时间
- 高可用管理:多个管理节点保证控制面不因单点故障中断
- 快速扩缩容:按负载调整服务副本数量
- 小规模集群替代方案:规模不大时用它替代更重的编排平台
查看集群状态
查看集群状态
docker node ls # 节点列表与角色
docker info --format '{{.Swarm.LocalNodeState}}' # 本节点是否已加入集群
docker service ls # 服务清单
ss -lntp | grep 2377 # 确认管理端点监听集群必备端口
| 端口 | 用途 | 缺失后果 |
|---|---|---|
| 2377/tcp | 集群管理 | 节点无法加入,管理指令失败 |
| 7946/tcp 与 7946/udp | 节点发现与状态同步 | 节点列表异常,健康检查不准 |
| 4789/udp | 覆盖网络数据面 | 跨主机容器互不可达 |
加入令牌泄露等于任何人可把主机加入集群并承载业务,进而读取集群内部数据;令牌要定期轮换并严格限制分发范围。
工作节点与管理节点的令牌不同:日常扩容只应使用工作节点令牌,需要新增管理节点时再单独使用管理令牌,避免管理面权限被不必要地扩散。
排障顺序:先用节点列表确认各节点状态,再检查三类端口的互通情况,最后才查服务配置;跨主机容器不通而单机正常,基本可以直接定位到覆盖网络端口被拦。