我有一个无线 USB 适配器,我希望我的 docker 容器仅使用它来上网(而不是计算机自己的无线适配器)。
我对网络的了解很基础,因此我尝试阅读大量资料来弄清楚如何做到这一点,但我完全力不从心。
到目前为止,我尝试了以下操作但没有成功(enx582c80139263 是 USB 无线适配器):
1)为容器创建一个网络命名空间,并将无线适配器移动到该命名空间(按照以下步骤操作这):
sudo docker run -dit --rm --privileged --net none --name mycontainer debian
pid=$(sudo docker inspect --format '{{.State.Pid}}' mycontainer);
sudo mkdir -p /var/run/netns;
sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid;
sudo ip link set dev enx582c80139263 netns $pid;
当我这样做时,适配器在执行 ifconfig 时不再显示 ip 地址。我不确定无线适配器在全局命名空间中如何正常获取 ip 地址的过程,所以我被困在这里
2) 为容器创建网络命名空间,然后创建 veth 对,其中一个 veth 位于容器命名空间中,另一个位于全局命名空间中。然后我给它们分配了 IP 地址,并使用桥接器 (brctl) 将无线适配器接口连接到全局命名空间 veth。
sudo docker run -dit --rm --privileged --net none --name mycontainer debian
pid=$(sudo docker inspect --format '{{.State.Pid}}' mycontainer);
sudo mkdir -p /var/run/netns;
sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid;
sudo ip link add veth0 type veth peer name veth1
sudo ip link set veth1 netns $pid
sudo ip netns exec $pid ifconfig veth1 10.0.0.1/24 up
sudo ifconfig veth0 10.0.0.2/24 up
sudo brctl addbr br0
sudo brctl addif br0 enx582c80139263 veth0
在将全局 veth 添加到网桥之前,我可以从一个 veth ping 到另一个 veth,但添加之后就不能了。不知道为什么
另外,当我将无线适配器连接到网桥时,我无法访问互联网(我认为可以通过内置无线网卡访问互联网,因为我仍然连接到 wifi)。
我可能完全用错了方法……过去几天我才真正了解了网络和 docker。如果我应该用不同的方法处理这个问题,请告诉我