docker network create命令中--subnet与--ip-range参数的区别是什么
Docker网络
--subnet与--ip-range配置问题解答 背景说明
在使用docker network create命令创建Docker网络时,有两个核心的网络配置参数,官方定义如下:
subnet:CIDR格式的子网,代表一个完整的网络段ip-range:从子网中划分出的、用于给容器自动分配IP的子范围
官方给出的参考配置示例如下:
$ docker network create \ --driver=bridge \ --subnet=172.28.0.0/16 \ --ip-range=172.28.5.0/24 \ --gateway=172.28.5.254 \ br0
上述示例中subnet的IP范围为172.28.0.0到172.28.255.255,ip-range的IP范围为172.28.5.0到172.28.5.255。
1、为何要将subnet范围设置得大于ip-range?
这么设计是为了灵活预留IP资源,覆盖不同场景的使用需求:
- 给固定IP容器预留地址:如果有需要手动指定静态IP的容器,你可以将静态IP规划在subnet范围内、但不在ip-range范围内,完全不用担心和Docker自动分配的IP产生冲突。比如示例中除了172.28.5.0/24用于自动分配外,172.28.0.0/24~172.28.4.0/24、172.28.6.0/24等剩余网段都可以用来配置静态IP。
- 适配多业务网络划分需求:同一个大的subnet下,可以拆分多个不同的ip-range分配给不同业务组、不同环境(测试/预发/生产)使用,隔离IP分配逻辑,让IP管理更清晰,避免跨业务IP冲突。
- 降低后续网络扩展成本:如果后续需要和宿主机局域网、其他节点Docker网络做路由打通,提前规划更大的subnet,后续扩展ip-range时不需要重新调整整个网络的子网配置,避免网络重建带来的业务中断。
2、为什么需要同时提供subnet和ip-range两个配置选项?
两个参数的定位和作用完全不同,搭配使用兼顾了网络合法性和IP分配的灵活性:
--subnet是网络的基础必备配置:Docker需要通过subnet明确整个网络的网段范围,才能生成对应的路由规则、做IP合法性校验,你配置的网关、容器静态IP、ip-range都必须在subnet范围内才能生效,否则创建网络时会直接报错。--ip-range是可选的IP自动分配规则限制:它的作用是约束Docker自动给容器分配IP的范围,不指定的话Docker默认会从整个subnet内随机分配IP。分开配置可以自由控制自动分配的IP范围,不需要把整个子网都开放给自动分配,避免手动规划的IP被占用。- 举个实际场景:如果只有subnet没有ip-range,你要给核心容器配置静态IP,需要自己记录哪些IP未被自动分配,很容易出现冲突;如果只有ip-range没有subnet,Docker无法判断该ip-range所属的网段,无法生成对应的网络路由规则,网络根本无法创建成功。
内容的提问来源于stack exchange,提问作者BertC
相关产品推荐
相关产品推荐

