【问题标题】:Changing default subnet for docker custom networks更改 docker 自定义网络的默认子网
【发布时间】:2017-10-15 15:58:09
【问题描述】:

我们的内部网络保留了 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

但是,当通过docker network create 或通过在docker-compose.yamlnetworks 部分中定义它们时创建新的自定义网络时,这些仍然是在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",

我知道我可以将子网值提供给docker network create,但我更希望在192.168.* 下创建所有此类子网。

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

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    对于发现此问题的任何人。现在可以了。

    $ docker -v
    Docker version 18.06.0-ce, build 0ffa825
    

    编辑或创建 docker daemon 的配置文件:

    # nano /etc/docker/daemon.json
    

    添加行:

    {
      "default-address-pools":
      [
        {"base":"10.10.0.0/16","size":24}
      ]
    }
    

    重启dockerd:

    # service docker restart
    

    检查结果:

    $ docker network create foo
    $ docker network inspect foo | grep Subnet
                        "Subnet": "10.10.1.0/24"
    

    它也适用于 docker-compose。

    您的"bip": "192.168.2.1/24" 仅适用于bridge0。这意味着任何在没有--network 的情况下运行的容器都将使用这个默认网络。

    【讨论】:

    • 这是否也适用于docker-compose 生成的网络?应该不会吧?
    • 哥们,为什么是/16,大小是24?
    • @Obay Abd-Algader docker 将创建一个 10.10.0.0/16 的“池”。然后每个子网将从池中取出 /24。
    • 谢谢,我知道了@anch2150。我还注意到,除非手动删除,否则旧网络会保留在那里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多