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

背景

先说这两个是否冲突?

这两个是肯定可以同时存在的,各自使用自己的命令启动就行,互不干扰。

但是,如果在已经有 docker-compose 的环境下,直接使用 docker swarm init 会导致 docker 的网络模式发生变化,导致之前的容器无法访问。

Swarm初始化时会自动创建两个核心网络:

ingress:用于跨节点服务暴露和负载均衡(Overlay类型)
docker_gwbridge:桥接网络,用于Swarm节点间通信及容器对外访问
这些新网络的子网(如默认的172.17.0.0/16)可能与原有Docker Compose的bridge网络(如docker0)冲突 。

解决方案:

  1. 最安全的方案 :
    使用 docker compose down 停止所有服务,然后使用 docker swarm init 初始化 Swarm,再使用 docker compose up 启动服务。

  2. 影响最小的方案
    手动预创建Swarm网络,并指定子网,避免与现有网络冲突:

    1
    2
    3
    docker 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
2
3
4
docker swarm init --advertise-addr <管理节点IP> \
--default-addr-pool 10.20.0.0/16 \
--default-addr-pool-mask-length 24

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务
总字数 84.7k 访客数 访问量