“docker-compose down”删除ip路由

“docker-compose down”删除ip路由

在两台不同的机器(一台台式机和一台服务器)上,相同的docker-compose 文件的行为有所不同......

在一台机器上docker-compose down似乎完全删除了后续docker-compose up不会重新创建的 IP 路由。

文字记录:

之后systemctl restart docker ip route给出:

default via 192.168.22.1 dev enp3s0 proto dhcp src 192.168.22.30 metric 202 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 172.18.0.0/16 dev br-b32036613f97 proto kernel scope link src 172.18.0.1 linkdown 172.20.0.0/16 dev br-3f0603a1198c proto kernel scope link src 172.20.0.1 linkdown 192.168.22.0/24 dev enp3s0 proto dhcp scope link src 192.168.22.30 metric 202 192.168.22.1 dev enp3s0 proto dhcp scope link src 192.168.22.30 metric 1024

docker-compose up

default via 192.168.22.1 dev enp3s0 proto dhcp src 192.168.22.30 metric 202 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 172.18.0.0/16 dev br-b32036613f97 proto kernel scope link src 172.18.0.1 172.20.0.0/16 dev br-3f0603a1198c proto kernel scope link src 172.20.0.1 192.168.22.0/24 dev enp3s0 proto dhcp scope link src 192.168.22.30 metric 202 192.168.22.1 dev enp3s0 proto dhcp scope link src 192.168.22.30 metric 1024

之后compose-compose down服务器会给出:

default via 192.168.22.1 dev enp3s0 proto dhcp src 192.168.22.30 metric 202 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 192.168.22.0/24 dev enp3s0 proto dhcp scope link src 192.168.22.30 metric 202 192.168.22.1 dev enp3s0 proto dhcp scope link src 192.168.22.30 metric 1024

但桌面将显示(如预期):

default via 192.168.22.1 dev enp3s0 proto dhcp src 192.168.22.30 metric 202 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 172.18.0.0/16 dev br-b32036613f97 proto kernel scope link src 172.18.0.1 linkdown 172.20.0.0/16 dev br-3f0603a1198c proto kernel scope link src 172.20.0.1 linkdown 192.168.22.0/24 dev enp3s0 proto dhcp scope link src 192.168.22.30 metric 202 192.168.22.1 dev enp3s0 proto dhcp scope link src 192.168.22.30 metric 1024

在桌面上执行以下操作docker-compose up将会成功,但在服务器上,路由不会重新创建,并且容器对外界不可见......

只有以过于昂贵的方式完全重启 docker 服务才能将路由重新带到服务器上......

我不知道我做错了什么。

两台机器都运行最新版本的 arch linux。桌面使用 Gnome 并运行 NetworkManager,服务器是无头的并运行 systemd-networkd... 这几乎是我能看到的唯一区别...

两个版本均运行:

  • Docker 版本 19.03.5-ce,内部版本 633a0ea838
  • docker-compose 版本 1.25.1,构建未知

答案1

我对这个问题的根源的认识是完全错误的。

我正在使用 systemd-networkd 来管理这台机器的网络,并且我有一个按名称捕获所有网络接口的过滤器,以便 docker 桥和 veth 都可以由 networkd 管理。

这当然是错误的。

这也导致每次启动后都需要手动重新启动docker。

为了解决这个问题,我配置了 systemd-networkd 来忽略 docker 管理的接口。

您可以在此处找到一个示例:

相关内容