На двух разных машинах (настольном компьютере и сервере) тем же файл 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 ... Это почти единственная разница, которую я вижу ...
Обе версии работают:
Я совершенно ошибался относительно происхождения проблемы.
Я использую systemd-networkd для управления сетью этого компьютера, и у меня был универсальный фильтр по имени для сетевых интерфейсов, так что даже docker-мосты и veth управлялись networkd.
Конечно, это было неправильно.
Это также вызывало необходимость перезапуска докера вручную после каждой загрузки.
Чтобы решить эту проблему, я настроил systemd-networkd на игнорирование интерфейсов, управляемых докером.
Вы можете найти пример здесь: