我想为码头容器的子网设置自定义的IP池。为此,我遵循了这个已停止的docker守护进程,删除了docker0接口并使用自定义NetworkId重新创建
systemctl stop docker
ip link del docker0已使用NetworkManager重新创建docker0虚拟网桥接口并将其打开。
ant@ant ~> nmcli con up <UID>
ant@ant ~> ip addr
111: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 3e:ff:1b:ce:e4:a4 brd ff:ff:ff:ff:ff:ff
inet 172.20.0.1/20 brd 172.20.15.255 scope global docker0
valid_lft forever preferred_lft forever现在当我再次启动docker守护进程时,
ant@ant ~> systemctl start docker
ant@ant ~> ip addr
111: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 3e:ff:1b:ce:e4:a4 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever我设置的子网是172.20.0.1/20,但只要我启动docker守护进程,docker0接口的子网就会更改为172.17.0.1/16。我在局域网中有一些想要访问的内网in,它们位于该子网中。
是否有更好的方法来配置网桥接口?
发布于 2017-02-17 04:15:42
Jordan的回答创建了一个子网工作,然后在容器上运行应用程序时指定该工作。这有助于限制运行容器时使用的IP池。
但是,限制docker守护程序创建的docker0虚拟网桥接口的IP池无济于事。我正在寻找的答案如下:
Docker运行一个管理容器的守护进程。此守护进程创建一个接口docker0,该接口默认配置为使用172.17.0.1/16子网进行操作。因此,我们需要配置守护进程以使用所需的子网。
dockerd用于运行docker守护程序。它具有--bip网桥IP选项(请参阅dockerd)。
dockerd --bid=172.20.0.1/20但是大多数系统都使用各自的服务管理器来运行docker来实现这一点。在这种情况下,docker在/etc/docker/daemon.json中有一个docker守护进程配置文件。Docker linux daemon configuration,所以如果daemon.json不存在,就创建它并添加bip。
{
"bip":"172.30.0.1/20"
}发布于 2017-02-17 03:34:22
通过创建特定的桥接容器网络,您应该能够使用此命令定义ip地址。documentation是一个很好的入口点。
$ docker network create --driver bridge --subnet 172.20.0.1/20 subnet
$ docker run --name app --network subnet <container>您的所有容器现在都应该在所选子网中具有ip地址。
此外,official doc还描述了如何创建自己的网桥连接。
发布于 2017-02-17 17:58:06
如果您更改docker0网桥的子网,它将保持不变。对于特定的ip用途,请使用新的网络创建。docker network在网络中运行容器后创建--subnet=172.20.0.1/20foo。docker运行-itd --net foo image_name假设你想为容器提供特定的ip。使用docker运行-itd --net foo --ip 172.20.0.12 image_name
https://stackoverflow.com/questions/42281996
复制相似问题