如何在已经有 docker-compose 的环境下启用 docker swarm 并减少影响

背景
先说这两个是否冲突?
这两个是肯定可以同时存在的,各自使用自己的命令启动就行,互不干扰。
但是,如果在已经有 docker-compose 的环境下,直接使用 docker swarm init
会导致 docker 的网络模式发生变化,导致之前的容器无法访问。
Swarm初始化时会自动创建两个核心网络:
ingress:用于跨节点服务暴露和负载均衡(Overlay类型)
docker_gwbridge:桥接网络,用于Swarm节点间通信及容器对外访问
这些新网络的子网(如默认的172.17.0.0/16)可能与原有Docker Compose的bridge网络(如docker0)冲突 。
解决方案:
最安全的方案 :
使用docker compose down
停止所有服务,然后使用docker swarm init
初始化 Swarm,再使用docker compose up
启动服务。影响最小的方案
手动预创建Swarm网络,并指定子网,避免与现有网络冲突:1
2
3docker network create -d overlay --subnet 10.10.0.0/16 --attachable my_overlay_net
- 使用
--attachable
选项,允许非Swarm容器(如原有Compose容器)加入该网络 - 通过–subnet明确子网范围,避免与现有网络(如172.17.0.0/16)重叠
或者 初始化Swarm时强制使用预定义网络:
1 | docker swarm init --advertise-addr <管理节点IP> \ |
如何在已经有 docker-compose 的环境下启用 docker swarm 并减少影响
2025/03/29/note-docker-compose-2-swarm/
评论
评论插件加载失败
正在加载评论插件