Docker中指定非默认bridge网段(容器子网IP范围)
在 Docker 中,指定默认网段(子网 IP 范围) 主要是为了解决默认 bridge 网络和现有网络冲突的问题。
1.修改 Docker Daemon 配置(推荐方式)
1.1.编辑配置文件(通常为 /etc/docker/daemon.json)
1 | { |
1.2.参数解释
bip(Bridge IP):指定默认bridge网络的 IP 网段;- 示例中
192.168.100.1/24表示 Docker 默认网络网段为192.168.100.0/24,网关是192.168.100.1。
1.3.示例完整配置
1 | { |
字段解释
"bip": "172.30.0.1/16"
bip = bridge IP:指定 Docker 默认
bridge网络(即docker0)的子网和网关。172.30.0.1/16意思是:- 子网:
172.30.0.0/16(65536 个地址) - 网关:
172.30.0.1
- 子网:
⚠️ 如果你不显式指定,Docker 默认使用
172.17.0.1/16作为 bridge 网络。
"fixed-cidr": "172.30.0.0/24"
限制 Docker 容器 IP 分配范围 为
172.30.0.0/24(256 个地址)。即使整个
docker0网段是/16,Docker 只会在/24中分配容器 IP。好处:
- 避免占用整个
/16造成地址浪费。 - 更容易路由/隔离。
- 与上游网络策略(如 VPC)兼容。
- 避免占用整个
"default-address-pools"
用于控制 Docker 用户自定义网络(比如 docker network create)使用的默认地址池。
1 | "default-address-pools": [ |
- 每次用户执行
docker network create(未指定子网)时,Docker 自动从172.31.0.0/16中分配一个/24子网。 - 第一网段为:
172.31.0.0/24,下一个是172.31.1.0/24,依此类推。
它避免了不同项目间创建自定义网络时发生 IP 冲突。
1.4. 如下自定义网络
docker0网桥:使用172.30.0.1/16容器 IP 只从
172.30.0.0/24里分配,例如:172.30.0.2用户自定义网络:
1
docker network create mynet1
会自动获得:
172.31.0.0/24
再建一个mynet2:
会获得:172.31.1.0/24
1.5.注意事项
- 所有这些地址段 都不能与宿主机实际网段冲突。
- 若系统已有
172.30.*.*的网卡或路由,启动 Docker 守护进程时会失败。 - 如用于 K8s 环境(containerd/Calico/flannel),需配合考虑网络规划。
2.使用 default-address-pools 控制 Docker 子网分配
这是新方式,适合 docker network create 时按池分配子网:
1 | { |
这会使 Docker 在每次创建网络时,从
172.20.0.0/16中按/24分配子网。
3.重启 Docker 生效
1 | sudo systemctl daemon-reload |