小编iss*_*src的帖子

通过特定物理接口的docker网络

所以我试图创建一个网络(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)

networking nic docker docker-network macvlan

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

docker ×1

docker-network ×1

macvlan ×1

networking ×1

nic ×1