我想为Docker容器的子网设置IP自定义池。为此,我遵循了此停止的docker守护程序,删除了docker0接口并使用自定义NetworkId重新创建
systemctl stop docker
ip link del docker0
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
现在,当我再次启动docker daemon时,
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
Run Code Online (Sandbox Code Playgroud)
我设置的子网是,172.20.0.1/20但是一旦我启动docker daemon,docker0接口的子网就会更改为172.17.0.1/16。我要访问的LAN中有一些私有IP,它们位于该子网中。
有没有更好的方法来配置桥接接口?
Jordan的答案创建了一个子网工作,然后在容器上运行应用程序时指定了子网工作。这有助于限制运行容器时使用的IP池。
但是,这无助于限制docker0由docker守护程序创建的虚拟网桥接口的IP池。我一直在寻找的答案如下:
Docker运行一个守护程序来管理容器。该守护程序创建一个接口docker0,该接口默认情况下配置为使用172.17.0.1/16子网进行操作。因此,我们需要将守护程序配置为使用所需的子网。
dockerd用于运行Docker守护程序。它具有--bip网桥IP选项(请参阅dockerd)。
dockerd --bid=172.20.0.1/20
Run Code Online (Sandbox Code Playgroud)
但是大多数系统使用各自的服务管理器运行docker来完成此任务。在这种情况下,docker在以下位置有一个docker守护程序配置文件/etc/docker/daemon.json。Docker linux守护程序配置
因此,如果daemon.json不存在,请创建它并添加bip。
{
"bip":"172.30.0.1/20"
}
Run Code Online (Sandbox Code Playgroud)
小智 0
通过创建特定的桥接容器网络,您应该能够使用此命令定义 IP 地址。文档是一个很好的切入点。
$ docker network create --driver bridge --subnet 172.20.0.1/20 subnet
$ docker run --name app --network subnet <container>
Run Code Online (Sandbox Code Playgroud)
现在,所有容器都应在所选子网中具有 IP 地址。
此外,官方文档还描述了如何创建自己的桥接连接。
| 归档时间: |
|
| 查看次数: |
2661 次 |
| 最近记录: |