推荐基于原生Swarm Mode配置Docker跨主机Overlay网络:先确保各节点Docker版本一致(≥20.10)、时间同步、防火墙开放2377/7946/4789端口;再用docker swarm init初始化集群并用join命令加入节点;接着在manager节点执行docker network create -d overlay --attachable创建可调试的Overlay网络;最后通过docker service create部署跨主机服务并用ping或wget验证连通性。

在 Docker 中配置跨主机容器通信的 Overlay 网络,主流且推荐的方式是基于原生 Swarm Mode 实现——它无需额外部署 Consul/etcd 等外部 KV 存储,简化了架构,也更稳定可靠。关键在于集群初始化、网络创建和服务部署三个环节的协同。
确保基础环境就绪
所有参与节点需满足以下条件:
- 安装相同大版本的 Docker(建议 20.10 或更高),避免驱动兼容问题
- 各主机时间同步(可用 chrony 或 systemd-timesyncd)
- 防火墙开放必要端口:
TCP 2377(Swarm 管理通信)
TCP/UDP 7946(节点间网络发现与控制面通信)
UDP 4789(VXLAN 数据平面封装流量) - 例如在 Ubuntu 上执行:
sudo ufw allow 2377/tcp
sudo ufw allow 7946
sudo ufw allow 4789/udp
初始化并组建 Swarm 集群
选择一台主机作为 manager 节点运行初始化命令:
- 执行:docker swarm init --advertise-addr (如
192.168.1.10) - 命令输出中会显示完整的
docker swarm join命令及 token,复制该命令 - 在其余主机上粘贴并执行该 join 命令,使其以 worker 或 manager 身份加入
- 任意 manager 节点上运行 docker node ls,确认所有节点状态为 Ready
创建可接入的 Overlay 网络
Overlay 网络需在 manager 节点上创建,并自动同步至全部集群节点:
- 运行:docker network create -d overlay --attachable my-overlay
-
--attachable 是关键参数:它允许非 service 的独立容器(如用
docker run启动的容器)手动加入该网络,便于调试和临时测试 - 不加此参数时,仅
docker service create创建的服务能使用该网络 - 创建后,所有节点上执行
docker network ls均可见该网络,且 SCOPE 显示为 swarm
部署服务并验证跨主机连通性
利用服务调度能力,让容器自动分布在不同主机上:
- 启动一个 Nginx 服务:
docker service create --name web --network my-overlay -p 8080:80 nginx - 启动一个 Alpine 客户端服务(用于测试):
docker service create --name client --network my-overlay alpine sleep 3600 - 查出 client 服务的一个任务容器 ID:
docker service ps client→ 找到 RUNNING 状态容器的 ID - 进入该容器:
docker exec -it <container-id> sh</container-id> - 在容器内执行:
ping -c 3 web或wget -qO- http://web
若返回 Nginx 欢迎页 HTML,说明跨主机 Overlay 通信已生效


















