配置 Docker 以不使用 172.17.0.0 范围

配置 Docker 以不使用 172.17.0.0 范围

由于强制门户和默认 Docker IP 范围存在问题,我尝试让 Docker 使用 198.18.0.0 范围,而不是 172.17.0.0,这与我居住地的火车上使用的强制门户发生冲突。

下列的文档,我创建了/etc/docker/daemon.json,并在其中放入了以下内容:

{
    "bip":"198.18.0.0/16"
}

这对 docker0 有效,但似乎没有影响任何其他网络,并且使用 docker compose 创建的第一个网络是 172.17.0.0,这会重新产生冲突。

如何更改默认子网全部docker 网络(最好不需要在每个 Compose 文件中声明我的自定义 IP 范围)?

答案1

可以重新定义默认范围。

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

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

# 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。更多信息请点击此处https://github.com/moby/moby/pull/29376(已合并)

答案2

docker 会在三个地方生成网络子网。

  • 默认桥接
  • 用户生成的桥接网络
  • 群体模式生成覆盖网络

对于默认桥接器(称为“网桥”),您可以指定 BIP(我相信那是桥接 IP;确保它是主机 IP,而不是网络 IP) 中的daemon.json文件。对于用户生成的桥接网络,您可以定义一个子网池以供选择(假设用户没有手动指定子网)。对于这两个,您的子网池/etc/docker/daemon.json如下所示:

{
  "bip": "10.200.0.1/24",
  "default-address-pools":[
    {"base":"10.201.0.0/16","size":24},
    {"base":"10.202.0.0/16","size":24}
  ]
}

上述每个地址池设置都定义了一个 CIDR 范围以及从该范围分配的子网大小。因此,上述设置定义了两个 B 类范围,它们被分配为 C 类网络 (/24)。对于默认地址池,您至少需要 18.06。您需要重新加载 docker 守护程序才能应用此更改 ( systemctl reload docker)。并且此更改只会修改新创建的用户网络,因此您需要停止容器并删除错误范围内的现有网络。


在 18.09 中,Docker 添加了指定 Swarm 模式生成的覆盖网络的地址范围的功能。目前这只能在 Swarm 创建时完成,希望将来能够更新以允许docker swarm update调整这些池:

$ docker swarm init \
  --default-addr-pool 10.202.0.0/16 \
  --default-addr-pool 10.203.0.0/16 \
  --default-addr-pool-mask-length 24

答案3

我用Docker 桌面在一个视窗操作系统,我尝试更改默认的桥接 IP。

每次我尝试更改时,Docker 都会抛出错误并要求我重置设置只是 bip在设置中。

这有效:(必须深入研究并了解其工作原理)

{
  "bip": "192.168.1.5/24", 
  "fixed-cidr": "192.168.1.5/25", 
  "default-address-pools":[
      { "base":"192.168.2.5/24", "size":28 }
  ]
}

答案4

这可能有点残忍,但我只是sudo ifconfig docker0 down关闭了与我尝试使用的 wifi 冲突的界面。

相关内容