【发布时间】:2016-12-07 15:10:49
【问题描述】:
我想知道在没有任何参数的情况下创建网络时是否有任何方法可以影响默认子网大小和使用的地址池。
重现问题的步骤: 1) 用 Docker 获得一个新的 VM(在我的例子中是 Ubuntu 16.04,Docker 1.12.3) 2) 尝试创建 50 个网络:
for i in {1..50}; do docker network create net-$i; done
在某些时候你会开始出错 3)查看结果:
for i in $(docker network ls -q); do docker network inspect --format='{{.Name}} {{.IPAM.Config}}' $i; done
输出如下:
net-1 [{172.18.0.0/16 172.18.0.1/16 map[]}]
net-2 [{172.19.0.0/16 172.19.0.1/16 map[]}]
net-3 [{172.20.0.0/16 172.20.0.1/16 map[]}]
net-4 [{172.21.0.0/16 172.21.0.1/16 map[]}]
net-5 [{172.22.0.0/16 172.22.0.1/16 map[]}]
net-6 [{172.23.0.0/16 172.23.0.1/16 map[]}]
net-7 [{172.24.0.0/16 172.24.0.1/16 map[]}]
net-8 [{172.25.0.0/16 172.25.0.1/16 map[]}]
net-9 [{172.26.0.0/16 172.26.0.1/16 map[]}]
net-10 [{172.27.0.0/16 172.27.0.1/16 map[]}]
net-11 [{172.28.0.0/16 172.28.0.1/16 map[]}]
net-12 [{172.29.0.0/16 172.29.0.1/16 map[]}]
net-13 [{172.30.0.0/16 172.30.0.1/16 map[]}]
net-14 [{172.31.0.0/16 172.31.0.1/16 map[]}]
net-15 [{192.168.0.0/20 192.168.0.1/20 map[]}]
net-16 [{192.168.16.0/20 192.168.16.1/20 map[]}]
net-17 [{192.168.32.0/20 192.168.32.1/20 map[]}]
net-18 [{192.168.48.0/20 192.168.48.1/20 map[]}]
net-19 [{192.168.64.0/20 192.168.64.1/20 map[]}]
net-20 [{192.168.80.0/20 192.168.80.1/20 map[]}]
net-21 [{192.168.96.0/20 192.168.96.1/20 map[]}]
net-22 [{192.168.112.0/20 192.168.112.1/20 map[]}]
net-23 [{192.168.128.0/20 192.168.128.1/20 map[]}]
net-24 [{192.168.144.0/20 192.168.144.1/20 map[]}]
net-25 [{192.168.160.0/20 192.168.160.1/20 map[]}]
net-26 [{192.168.176.0/20 192.168.176.1/20 map[]}]
net-27 [{192.168.192.0/20 192.168.192.1/20 map[]}]
net-28 [{192.168.208.0/20 192.168.208.1/20 map[]}]
net-29 [{192.168.224.0/20 192.168.224.1/20 map[]}]
net-30 [{192.168.240.0/20 192.168.240.1/20 map[]}]
因此 Docker 使用 RFC1918 网络 172.16/12 和 192.168/16 和网络掩码,将两个网络分成 16 个子网。
我想知道是否有任何方法可以影响这种行为。 我在 CI 管道中使用 docker-compose 来部署应用程序,并且我强烈希望避免在 docker-compose.yml 文件中对网络进行硬编码,因为它会破坏它的可移植性。
【问题讨论】:
-
请参阅docs.docker.com/compose/compose-file/#/… 下的
ipam部分。这可能会有所帮助。 -
这正是我想要避免的,因为它使 compose-files 不可移植。我希望有一些 Docker 守护程序选项,例如:docs.docker.com/engine/userguide/networking/default_network/… 它具有更改 docker0 的 IP 地址和更改容器 IP 池的选项,但不能更改已创建网络的池。
-
有一个feature request,但上面没有动静。可以这么说,签署“请愿书”。
标签: networking docker docker-compose