Docker创建新网络时未使用指定IP池的问题问询
解决Docker自定义网络不使用指定IP池的问题
哈哈,这个坑我刚踩过没多久!问题出在你对bip和fixed-cidr的作用范围理解上——这俩配置只对Docker的**默认桥接网络(docker0)**生效,你手动创建的自定义网络根本不会读这个配置,自然不会用你指定的IP池。下面给你两种针对性的解决办法:
1. 手动给自定义网络指定子网
如果只是偶尔创建自定义网络,直接在创建时显式指定子网范围就行,命令格式如下:
docker network create --subnet=192.168.89.0/24 --gateway=192.168.89.1 my-custom-network
这样新创建的my-custom-network就会严格使用你指定的192.168.89.0/24子网,容器IP也会从这个范围分配。
2. 配置全局默认地址池(推荐)
如果不想每次创建自定义网络都手动敲子网参数,可以修改daemon.json添加default-address-pools配置,让所有新创建的自定义桥接网络自动从你指定的大子网里划分IP段。修改后的配置如下:
{ "bip": "192.168.89.1/22", "fixed-cidr": "192.168.89.2/24", "default-address-pools": [ { "base": "192.168.89.0/22", "size": 24 } ] }
base:指定你预留的整个大子网范围,和bip的网段保持一致避免冲突size:指定每个自定义网络自动划分的子网掩码长度(这里是/24,也就是每个子网有254个可用IP)
修改完后记得重启Docker daemon让配置生效:
systemctl restart docker
关键注意事项
- 已经创建好的自定义网络不会自动更新配置,需要先删除(
docker network rm <网络名>)再重新创建才能用上新的默认地址池 fixed-cidr的作用仅仅是限制**默认桥接网络(docker0)**里的容器IP范围,自定义网络完全不受这个参数影响,这是很多新手容易混淆的点
验证配置是否生效
- 检查docker0网桥的IP是否符合
bip配置:
ip addr show docker0
- 创建一个新的自定义网络,然后查看它的子网配置:
docker network create test-net docker network inspect test-net | grep Subnet
输出应该显示子网在192.168.89.0/22范围内的某个/24网段。
内容的提问来源于stack exchange,提问作者Uwe Trotzek
相关产品推荐
相关产品推荐

