更改docker自定义网络的默认子网

Ole*_*yar 6 docker docker-compose

我们的内部网络具有为内部用途保留的范围172.20.0.0/16,并且docker默认使用172范围用于其内部网络.我可以通过为bip守护进程提供设置来重置桥接器以生存在192.168中:

?  ~ sudo cat /etc/docker/daemon.json
{
  "bip": "192.168.2.1/24"
}

?  ~ ifconfig                        
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
    inet 192.168.2.1  netmask 255.255.255.0  broadcast 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

但是,当通过创建新的自定义网络docker network create或通过在这些networks部分中定义它们docker-compose.yaml仍在172中创建时,最终会与172.20以下内容发生冲突:

?  ~ docker network create foo
610fd0b7ccde621f87d40f8bcbed1699b22788b70a75223264bb14f7e63f5a87
?  ~ docker network inspect foo | grep Subnet
                "Subnet": "172.17.0.0/16",
?  ~ docker network create foo1              
d897eab31b2c558517df7fb096fab4af9a4282c286fc9b6bb022be7382d8b4e7
?  ~ docker network inspect foo1 | grep Subnet
                "Subnet": "172.18.0.0/16",
Run Code Online (Sandbox Code Playgroud)

我知道我可以提供子网值docker network create,但我宁愿想要创建所有这些子网192.168.*.

如何配置dockerd自动执行此操作?

rNi*_*Nix 6

对于任何发现此问题的人。现在有可能。

$ docker -v
Docker version 18.06.0-ce, build 0ffa825
Run Code Online (Sandbox Code Playgroud)

编辑或创建docker守护程序的配置文件:

# nano /etc/docker/daemon.json
Run Code Online (Sandbox Code Playgroud)

添加行:

{
  "default-address-pools":
  [
    {"base":"10.10.0.0/16","size":24}
  ]
}
Run Code Online (Sandbox Code Playgroud)

重新启动dockerd:

# service docker restart
Run Code Online (Sandbox Code Playgroud)

检查结果:

$ docker network create foo
$ docker network inspect foo | grep Subnet
                    "Subnet": "10.10.1.0/24"
Run Code Online (Sandbox Code Playgroud)

它也适用于docker-compose。

您的"bip": "192.168.2.1/24"作品仅适用于bridge0。这意味着任何不运行的容器--network将使用此默认网络。

  • @Obay Abd-Algader docker 将创建一个 10.10.0.0/16 的“池”。然后每个子网将从池中取出/24。 (3认同)
  • 这也适用于“docker-compose”生成的网络吗?可能不会? (2认同)
  • 老兄,为什么是/16,尺寸是24? (2认同)