我正在努力解决网络问题。
我有一个 Docker 实例在172.17.0.14
上运行,其中包含 172.18.0.0/24
网络上的所有容器。使用Vagrant,您将执行类似sudo route add -net 172.18.0.0 netmask 255.255.255.0 gw 172.17.0.14
来访问子网的操作。
但是,当我在容器内运行route add
时,我得到
SIOCADDRT:不允许操作
我能做什么?有没有像索卡特这样的东西?我不想添加 NETCAP 功能。
您需要正确的权限。显然,至少有两种方法可以做到这一点:
一个从这里:
docker exec --privileged container ip route add default via 172.17.0.14 dev eth0
另一种选择是从此处公开网络:
pid=($sudo docker inspect -f '{{.State.Pid}}' container)
sudo mkdir -p /var/run/netns
sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid
sudo ip netns exec $pid ip route add default via 172.17.0.14