由于强制门户和默认 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 冲突的界面。