为什么启动 docker 容器会改变主机的默认路由?

dar*_*rio 5 networking routes docker

我已经使用以下路由表配置了我的主机:

user@host:~ $ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
{VPN SERVER IP} 192.168.2.1     255.255.255.255 UGH       0 0          0 wlan0
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0
Run Code Online (Sandbox Code Playgroud)

因此,如果没有连接到 VPN,我就不会连接到互联网:

user@host:~ $ ping google.com
connect: Network is unreachable
Run Code Online (Sandbox Code Playgroud)

一旦我启动 docker 容器,主机的路由表就会更改为:

user@host:~ $ netstat -rn
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.2.1     0.0.0.0         UG        0 0          0 wlan0
{VPN SERVER IP} 192.168.2.1     255.255.255.255 UGH       0 0          0 wlan0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 docker0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 vethcbeee28
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0
Run Code Online (Sandbox Code Playgroud)

我再次连接到互联网:

user@host:~ $ ping google.com
PING google.com (216.58.212.238) 56(84) bytes of data.
Run Code Online (Sandbox Code Playgroud)

基本上我的主机在没有连接到 VPN 的情况下应该无法连接到互联网。但是,启动容器会再次设置到我的网关的默认路由。

有人知道这是怎么回事吗?并且,如何避免这种情况?

到目前为止,我在这里找到了一个我想避免的解决方法。

编辑:

我刚刚发现即使从 dockerfile 构建图像也会发生这种情况!

dar*_*rio 1

nogateway您可以在文件中指定该选项/etc/dhcpd.conf

# Avoid to set the default routes.
nogateway
Run Code Online (Sandbox Code Playgroud)