macvlan - 容器无法从物理网络上的其他设备 ping 通

macvlan - 容器无法从物理网络上的其他设备 ping 通

尝试了解 macvlan 如何工作,并希望能够为 docker 容器分配一个 IP 号码,并使其在整个网络内均可 ping 通。

我的物理路由器的 IP 号为 192.168.1.1,子网掩码为 255.255.255.0。

在我的docker主机上我创建了一个如下网络:

sudo docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=enp0s3 -o macvlan_mode=bridge mynetwork

然后我启动了一个基于 alpine 的容器,并给它分配了一个 IP 号:

sudo docker container run -it --name alpine1 --network mynetwork --ip 192.168.1.223 alpine

在此容器中,当我检查 IP 地址时,我得到:

inet 192.168.1.223/24 brd 192.168.1.255 scope global eth0

但是,我无法从我的网络中的任何其他物理机器 ping 该容器。

我读到过某处说主机上的父接口需要处于混杂模式?

因此在主机上我做了以下操作:

ip link set dev enp0s3 promisc on

但我仍然无法 ping 通容器。

如果您能帮助我理解这一切,我将非常感激。

更新

根据收到的评论,我决定直接在物理服务器上测试我的设置,一切正常。我能够从容器内 ping 物理机器,也可以从网络中的物理机器 ping 容器。

所以我遇到的问题与我的初始测试是在 VirtualBox 虚拟机中的容器上进行的有关。但我仍未确定问题出在哪里。

答案1

由于它是容器场景中的虚拟机,因此您需要将 vbox 中的网络设置从 NAT->bridge 更改为启用 promisc 以允许所有。

相关内容