docker跨主机overlay网络需基于swarm集群实现:先安装同版本docker、开放2377/7946/4789端口,再用docker swarm init初始化集群并加入节点,接着创建--attachable的overlay网络,最后通过service部署并验证跨主机通信。

在 Docker 中配置跨主机网络的 Overlay 模式,核心是搭建一个基于 Docker Swarm 的集群,并启用内置的 Overlay 网络驱动。Docker 自 1.12 起将 Swarm mode 集成进引擎,不再依赖外部 KV 存储(如 Consul、etcd),简化了 Overlay 网络部署。
准备多台 Linux 主机并安装 Docker
确保所有节点运行相同大版本的 Docker(建议 20.10+),且时间同步、防火墙开放必要端口:
- TCP 2377(集群管理通信)
- TCP/UDP 7946(容器网络发现)
- UDP 4789(Overlay 网络 VXLAN 数据流量)
例如 Ubuntu 上可执行:sudo ufw allow 2377/tcp && sudo ufw allow 7946 && sudo ufw allow 4789/udp
初始化 Swarm 集群并加入工作节点
在一台主机上执行初始化命令,获取 join token:
- docker swarm init --advertise-addr (如 192.168.1.10)
- 输出中会显示 docker swarm join --token SWMTKN-... 命令
- 在其他主机上运行该命令,使其作为 worker 或 manager 加入集群
执行 docker node ls 可确认节点状态为 Ready。
创建跨主机的 Overlay 网络
只需在任意 manager 节点上运行:
- docker network create -d overlay --attachable my-overlay-net
- --attachable 允许独立容器(非 service)接入该网络,方便调试
- 不加此参数时,仅 docker service create 启动的服务能使用该网络
该网络自动同步到所有集群节点,无需手动配置。
部署服务并验证跨主机通信
启动两个服务,分别运行在不同主机上:
- docker service create --name web --network my-overlay-net -p 8080:80 nginx
- docker service create --name client --network my-overlay-net alpine sleep 3600
进入 client 容器:docker exec -it










