Docker Swarm指定default-addr-pool-mask-length不生效 如何增大服务地址池
Docker Swarm调整默认地址池子网大小方案
问题原因
--default-addr-pool-mask-length参数必须配合--default-addr-pool自定义地址池参数一起使用才会生效,单独指定子网掩码长度不会覆盖Docker Swarm默认的10.0.0.0/8地址池+24位子网的默认配置。
解决方法
方案1:新集群直接重新初始化(推荐)
如果你的集群还未上线,可直接重建集群:
- 管理节点执行命令解散现有Swarm集群,操作前请备份所有服务、数据配置:
docker swarm leave --force
- 初始化时同时指定地址池和子网掩码长度,示例如下:
docker swarm init --default-addr-pool 10.0.0.0/8 --default-addr-pool-mask-length 16 --advertise-addr 10.242.233.175:2377
- 初始化完成后执行
docker info即可看到Swarm段的SubnetSize已调整为16。
方案2:现有已上线集群修改配置
如果集群无法直接重建,可修改Swarm内置配置:
- 导出当前Swarm集群配置:
docker config inspect --format '{{ json .Spec }}' docker/swarm/swarm_config > swarm_config.json
- 编辑
swarm_config.json文件,找到DefaultAddrPool和SubnetSize字段,修改为预期配置,示例:
{ "DefaultAddrPool": ["10.0.0.0/8"], "SubnetSize": 16 // 其余原有配置保持不变 }
- 提交更新Swarm配置:
docker config update docker/swarm/swarm_config --input swarm_config.json
- 重启所有管理节点的Docker daemon使配置生效:
systemctl restart docker
注意:该配置仅对修改后新创建的overlay网络生效,已存在的overlay网络不会自动调整子网,如需适配需要手动重建旧网络。
内容的提问来源于stack exchange,提问作者lacerated
相关产品推荐
相关产品推荐

