所以我试图创建一个网络(docker network create),以便其流量将通过特定的物理网络接口(NIC);我有两个:(<iface1>内部)和<iface2>(外部)。
我需要两个网卡的流量在物理上分开。
方法一:
我认为macvlan应该使用驱动程序来创建这样的网络。对于我在互联网上找到的大部分内容,解决方案参考 Pipework(现已弃用)和临时 docker-plugins(也已弃用)。对我最有帮助的是这个1
docker network create -d macvlan \
--subnet 192.168.0.0/16 \
--ip-range 192.168.2.0/24 \
-o parent=wlp8s0.1 \
-o macvlan_mode=bridge \
macvlan0
Run Code Online (Sandbox Code Playgroud)
然后,为了使容器从主机可见,我需要在主机中执行以下操作:
sudo ip link add macvlan0 link wlp8s0.1 type macvlan mode bridge
sudo ip addr add 192.168.2.10/16 dev macvlan0
sudo ifconfig macvlan0 up
Run Code Online (Sandbox Code Playgroud)
现在容器和主机可以看到对方:)但是容器无法访问本地网络。这个想法是容器可以访问互联网。
方法2:
因为我将手动使用<iface2>,所以如果默认情况下流量通过 ,我就可以了<iface1>。但无论我以何种顺序启动网卡(我也尝试暂时删除 LKM <iface2>);整个流量总是被外部网卡超过<iface2>。我发现这种情况发生是因为路由表在某个“随机”时间自动更新。为了强制流量通过<iface1>,我必须(在主机中):
sudo route del -net …Run Code Online (Sandbox Code Playgroud)