Swarm 节点通信口
7946 是 Docker Swarm 集群里节点之间通信的端口,TCP 与 UDP 都使用它:节点通过它做成员发现与状态同步,overlay 网络的元数据也依赖这条通道。它和 2377 的集群管理口、4789 的 overlay 数据通道构成一组,三者缺一不可,只放行其中一部分是集群失联最常见的配置原因。
基本信息
| 服务 | Docker Swarm 节点通信 |
|---|---|
| 协议 | TCP 与 UDP 7946(两者都要) |
| 用途 | 节点发现与 overlay 网络元数据同步 |
| 配套端口 | 2377 管理、4789 overlay 数据 |
| 通信范围 | 仅集群节点之间 |
典型使用场景
- 新建集群:开通节点之间的端口前先规划好防火墙规则
- 节点加入失败:排查时优先确认 7946 的 TCP 与 UDP 是否都通
- 跨机房部署:评估站点间 UDP 质量是否支撑成员发现
- 扩容:新节点加入前把它与既有节点的双向放行配好
- 网络核查:确认管理口没有对办公网或公网开放
集群端口
| 端口 | 协议 | 作用 |
|---|---|---|
| 2377 | TCP | 集群管理通信,节点加入与命令下发 |
| 7946 | TCP 与 UDP | 节点发现与状态同步 |
| 4789 | UDP | overlay 网络数据通道 |
| 4789 段 | UDP | 自定义 overlay 时需另行规划 |
放行与核对
放行与核对
# 一次性放行三组端口(firewalld 示例)
firewall-cmd --permanent --add-port=2377/tcp
firewall-cmd --permanent --add-port=7946/tcp --add-port=7946/udp
firewall-cmd --permanent --add-port=4789/udp
firewall-cmd --reload
# 查看集群节点状态
docker node ls
# 确认本机监听与连接情况
ss -lntup | grep 7946节点被标记为失联时,先看 7946 的 UDP 是否可达:TCP 放行而 UDP 被拦是很常见的半配置状态,节点能加入集群却在后续同步中不断掉线,表现为服务被反复重建。
集群通信口不具备面向公网的加固设计:把 2377 或 7946 暴露到公网,等于把集群成员关系与调度能力开放出去。生产部署应让它们只在集群节点之间可达。
成员列表以内部状态文件保存:节点被移除后若用同一台主机加回集群,需先清理残留的集群状态,否则会以旧身份加入并带来重复成员记录。变更操作前先备份该状态,回退时才有依据。
部署要点
- 三组端口成对放行,不要只开一半
- 跨机房场景先测 UDP 往返质量与丢包
- 新节点加入前先把双向策略配好
- 管理口与业务口在网段上尽量分离