docker 容器运行时无法删除默认网关

docker 容器运行时无法删除默认网关

我想从运行 Raspbian 的 Raspberry Pi 中删除默认路由。

这是我从中得到的route -n

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.178.1   0.0.0.0         UG    203    0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     204    0        0 docker0
169.254.0.0     0.0.0.0         255.255.0.0     U     206    0        0 veth07ba603
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.178.0   0.0.0.0         255.255.255.0   U     203    0        0 eth1

我尝试了以下命令来删除网关:

ip route del default via 192.168.178.1 dev eth1
route del default gw  192.168.178.1
route del default gw  192.168.178.1 dev eth1
route del -net 0.0.0.0 gw 192.168.178.1 netmask 0.0.0.0 dev eth1
ip route del 0.0.0.0/0

它们都不起作用。

如果我route -n再次运行,路线仍然存在,我仍然可以访问互联网。

系统日志看起来也不错:

Dec  3 02:42:21 pi dhcpcd[474]: eth1: deleted default route via 192.168.178.1

更新:

我发现只有当我运行 docker 容器时才会出现这个问题,例如:

docker run --name 'foo' -itd alpine /bin/sh

如果容器关闭,我可以删除网关。但由于某种原因,如果我使用 启动容器,docker 会重新创建默认网关docker start foo。如果容器正在运行,我根本无法删除网关(见上文)。

有谁知道这里发生了什么事?如何在没有默认网关的情况下运行容器? Pi 不应该有互联网连接。

答案1

解决方案是通过添加以下行来为 Pi 分配静态 ip /etc/dhcpcd.conf

interface eth1
static ip_address=192.168.178.10

我现在可以adddel预期一样使用默认网关,无论 docker 容器是否正在运行。

相关内容