要让 docker 容器在分布式集群中可靠同步数据,必须使用 overlay 网络实现跨主机互通;通过 swarm 初始化与节点加入构建集群,创建 --attachable overlay 网络,结合静态 ip 和内置 dns 固化服务地址,分离同步与业务流量,并用 nc/telnet 和 docker network inspect 验证连通性与网络状态。

要让 Docker 容器在分布式集群中可靠同步数据,网络配置是基础前提。单纯依赖默认 bridge 模式无法跨主机通信,必须构建统一、可控、可寻址的网络平面。核心不是“选哪种模式”,而是“如何让不同物理节点上的容器像在同一个局域网里一样互通”。
用 Overlay 网络打通多主机容器通信
Overlay 是 Docker Swarm 原生支持的跨主机网络方案,底层基于 VXLAN 封装,自动处理 IP 分配与路由。它不依赖外部 SDN,部署轻量且与 Docker CLI 无缝集成。
- 初始化 Swarm 集群(主节点执行):
docker swarm init --advertise-addr - 其他节点加入集群(替换 token 和 IP):
docker swarm join --token:2377 - 创建可跨节点使用的 overlay 网络:
docker network create -d overlay --attachable my-sync-net
加 --attachable 允许独立容器(非 service)接入,方便调试和临时同步任务
为同步服务分配固定 IP 与 DNS 名称
数据同步常依赖稳定地址(如 rsync 目标、数据库连接串)。Docker 默认动态分配 IP,需结合网络与服务定义固化访问入口。
- 在 docker-compose.yml 中为关键同步组件指定静态 IP:
services:
redis-sync:
networks:
my-sync-net:
ipv4_address: 10.0.1.10 - 利用 Docker 内置 DNS:同一 overlay 网络下的容器可通过服务名直接解析,例如 postgres-sync 容器启动后,其他容器用 ping postgres-sync 即可通,无需查 IP
- 避免使用 host 模式——它绕过 Docker 网络栈,失去服务发现与隔离能力,且端口易冲突
同步流量与业务流量分离
结构化数据同步(如电池时序数据、GitLab 备份)常产生大量带宽占用,与 Web 请求混跑会导致延迟抖动甚至超时。应通过网络分层实现 QoS 隔离。
- 为同步任务单独创建 overlay 网络:
docker network create -d overlay sync-backup-net - 将 rsync 容器、备份存储容器、日志聚合器等全部接入该网络,业务服务则留在 my-sync-net 或其他业务网
- 若需限制同步带宽(如避免压垮边缘链路),可在 rsync 命令中加入 --bwlimit=5000(单位 KB/s)
验证连通性与故障定位要点
配置完成后,不能只测 ping 通,要模拟真实同步路径验证端到端可达性。
- 进入源容器,测试目标服务端口是否开放:
nc -zv redis-sync 6379 或 telnet postgres-sync 5432 - 检查 overlay 网络状态:
docker network inspect my-sync-net —— 确认各节点的 Peers 列表完整,无 missing 或 unreachable - 查看容器实际获得的 IP 和网关:
docker exec -itip addr show ,确认 IPv4 地址属于 overlay 子网(如 10.0.1.x),且有对应网关路由











