将 Docker 配置为不使用 172.17.0.0 范围

jrt*_*ell 42 docker docker-compose

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

按照docs,我创建了/etc/docker/daemon.json,并将以下内容放入其中:

{
    "bip":"198.18.0.0/16"
}
Run Code Online (Sandbox Code Playgroud)

这适用于 docker0,但它似乎没有影响任何其他网络,并且使用 docker compose 创建的第一个网络是 172.17.0.0,它重新创建了冲突。

我该怎么做才能更改所有docker 网络的默认子网(最好不必在每个撰写文件中声明我的自定义 IP 范围)?

小智 55

可以重新定义默认范围。

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

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

# 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。更多信息在这里https://github.com/moby/moby/pull/29376(合并)

  • 10.10.0.0/16 与全球默认网络重叠。您可以使用{“base”:“192.168.0.0/16”,“size”:24}。请参阅https://github.com/moby/moby/blob/0ac8cbf74765ca32e1b82df343bdf52ebb0fb6e2/vendor/github.com/docker/libnetwork/ipamutils/utils.go#L21 (3认同)

BMi*_*tch 28

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

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

对于默认网桥(称为“网桥”),您可以在文件中指定 BIP(我相信这是网桥 IP;确保它是主机 IP,而不是网络 IPdaemon.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}
  ]
}
Run Code Online (Sandbox Code Playgroud)

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


在 18.09 中,Docker 添加了为群模式生成的覆盖网络指定地址范围的功能。这只能在现在创建群时完成,希望将来会更新以允许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
Run Code Online (Sandbox Code Playgroud)


小智 5

我在Windows操作系统中使用Docker Desktop,并尝试更改默认的 Bridge IP。

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

这有效:(必须深入了解它是如何工作的)

{
  "bip": "192.168.1.5/24", 
  "fixed-cidr": "192.168.1.5/25", 
  "default-address-pools":[
      { "base":"192.168.2.5/24", "size":28 }
  ]
}
Run Code Online (Sandbox Code Playgroud)