我想为docker容器的子网设置自定义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
。我在局域网中有一些我希望访问的私有IP,它位于该子网中。
有没有更好的方法来配置网桥接口?
答案 0 :(得分:4)
Jordan的回答创建了一个子网工作,然后在容器上运行应用程序时指定该子网工作。这有助于限制运行容器时使用的IP池。
但是,限制docker守护程序创建的123.456
虚拟桥接口的IP池没有帮助。我正在寻找的答案如下:
Docker运行一个管理容器的守护进程。此守护程序创建一个接口docker0
,默认情况下将其配置为使用docker0
子网进行操作。因此,我们需要配置守护程序以使用所需的子网。
172.17.0.1/16
用于运行docker守护程序。它具有dockerd
网桥IP选项(请参阅dockerd)。
--bip
但是大多数系统使用各自的服务管理器来运行docker来实现这一目标。在这种情况下,docker在dockerd --bid=172.20.0.1/20
处有一个docker守护程序配置文件。 Docker linux daemon configuration
因此,如果它不存在则创建daemon.json并添加/etc/docker/daemon.json
。
bip
答案 1 :(得分:0)
通过创建特定的桥接容器网络,您应该能够使用此命令定义IP地址。 documentation是一个很好的切入点。
$ docker network create --driver bridge --subnet 172.20.0.1/20 subnet
$ docker run --name app --network subnet <container>
现在所有容器都应该在所选子网中拥有IP地址。
此外,official doc描述了如何创建自己的桥接连接。
答案 2 :(得分:0)
如果更改docker0网桥的子网,它将保持不变。 对于特定的ip目的,使用新的网络创建。 docker network create --subnet = 172.20.0.1 / 20 foo 在该网络中运行容器之后。 docker run -itd --net foo image_name 假设您要为容器指定特定的ip。使用 docker run -itd --net foo --ip 172.20.0.12 image_name