为什么在 L3 模式下使用 IPVLAN 时无法从主机 ping 通 Docker 容器?

为什么在 L3 模式下使用 IPVLAN 时无法从主机 ping 通 Docker 容器?

我有一个docker主机,其接口在网络10.0.1.0/24上,ip地址为10.0.1.9。我创建了一个docker网络,如下所示:

docker network create -d ipvlan \
--subnet=10.0.2.0/24 \
-o host_iface=ens3 \
-o ipvlan_mode=l3 \
ipvlan_net

然后我创建一个容器,如下所示:

docker run -itd --rm --network ipvlan_net --ip 10.0.2.10 --name test busybox

如果我创建多个容器,每个容器都可以互相 ping 通,但没有容器可以 ping 通 10.0.1.9 上的主机,主机也无法 ping 通容器。我在网上搜索过,但我找到的(少量)说明都无济于事。

答案1

您无法 ping 主机,因为这是 macvlan/ipvlan 网络上都存在的安全功能。从主机到容器(反之亦然)的流量经过过滤,以实施强大的网络隔离。

如果要实现主机到容器的连接(反之亦然),则必须在主机上的默认命名空间中手动创建 ipvlan 子接口。尝试以下操作:

ip link add ipvl0 link ens3 type ipvlan mode l3
ip link set ipvl0 up
ip addr add 10.0.250.0/24 dev ipvl0
ip route add 10.0.2.0/24 dev ipvl0

看到这个https://github.com/moby/moby/issues/21735#issuecomment-205904902

相关内容