更改docker bridge的IP地址池

时间:2017-02-16 18:32:25

标签: docker

我想为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,它位于该子网中。

有没有更好的方法来配置网桥接口?

3 个答案:

答案 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