尝试了解 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 以允许所有。