Ubuntu 5.3.0-51-generic
Docker version 19.03.6 (Docker CE)
我有两个带有网络接口 Device0 和 Device1 的网络适配器,我想将它们连接到 Container0 和 Container1。
每个容器都需要有自己的 IP 地址,然后是另一个,例如 172.16.0.10 到 172.16.0.11
我读到,使用 macvlan 实用程序可能会很好。
使用以下代码,其中 i [0,1] 我尝试创建 2 个不同的 macvlan,连接所述设备:
docker network create -d macvlan \
--subnet=172.16.0.1$i/24 \
-o parent=Device$i \
macvlan_$counter
代码创建了第一个网络,但由于地址空间重叠,第二个网络失败了
fd351775c70e1a3718e78bbed07e8f7a577a203f8526d2f80dad1b3e8f5f6482
Error response from daemon: Pool overlaps with other one on this address space
知道如何解决这个问题吗?
您看到的错误是因为您的 Docker 实例已经配置了一个配置了一系列 IP 的网络,它将与您的新 macvlan 网络的默认范围发生冲突。
您可以在创建网络时使用
--ip-range
标志(或 ip_range
中的 compose.yaml
)指定分发给网络上容器的 IP 范围。示例:
docker network create -d macvlan \
--subnet=192.168.32.0/24 \
--ip-range=192.168.32.128/25 \
--gateway=192.168.32.254 \
--aux-address="my-router=192.168.32.129" \
-o parent=eth0 macnet32
https://docs.docker.com/network/drivers/macvlan/
如果您希望容器始终使用单个 IP,您可以为该范围指定
/32
网络掩码,例如--ip-range=192.168.32.128/32
。
请注意,Docker 只允许您为每个父级创建一个 macvlan - 请参阅 https://github.com/moby/libnetwork/issues/2384 了解更多详细信息和解决方法。