"docker-compose down" удаляет IP-маршруты

На двух разных машинах (настольном компьютере и сервере) один и тот же файл docker-compose ведет себя по-разному...

На одной машине docker-compose down похоже, полностью удаляет IP-маршруты, что следующие docker-compose up не воссоздает.

Расшифровка:

После 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 на рабочем столе будет успешно, но на сервере маршруты не воссоздаются и контейнеры не видны внешнему миру...

Только слишком дорогой полный перезапуск службы докеров вернет маршруты на сервер...

Я понятия не имею, что делаю не так.

На обеих машинах установлена ​​последняя версия Arch Linux. Рабочий стол использует Gnome и запускает NetworkManager, а сервер безголовый и запускает systemd-networkd... Это почти единственная разница, которую я вижу...

Обе версии работают:

  • Докер версии 19.03.5-ce, сборка 633a0ea838
  • docker-compose версия 1.25.1, сборка неизвестна

1 ответ

Решение

Я совершенно ошибался относительно происхождения проблемы.

Я использую systemd-networkd для управления сетью этого компьютера, и у меня был универсальный фильтр по имени для сетевых интерфейсов, так что даже docker-мосты и veth управлялись networkd.

Конечно, это было неправильно.

Это также вызывало необходимость перезапуска докера вручную после каждой загрузки.

Чтобы решить эту проблему, я настроил systemd-networkd на игнорирование интерфейсов, управляемых докером.

Вы можете найти пример здесь:

Другие вопросы по тегам