Контейнер Docker не регистрирует имя хоста в docker-internal DNS

Контейнер Docker не регистрирует имя хоста в docker-internal DNS

Я использую Docker для реализации сервиса Nextcloud. Для этого я использую официальный образ nextcloud-apache, обратный прокси Nginx, certbot и MariaDB. Ничего особенного, на самом деле.

Мой экземпляр docker работает в режиме swarm. Все контейнеры работают вместе с менеджером на одном хосте с одной репликой для каждой службы, стандартные оверлейные сети. Swarm запускается с использованием стандартного файла compose.

Моя установка работала стабильно много месяцев, пока вчера вечером она не сломалась по непонятной причине. Насколько я вижу, не было никаких обновлений или перезапусков, ни для ОС (Ubuntu Server LTS), ни для Docker-CE, ни для любого из образов (я делаю все обновления вручную через регулярные промежутки времени, и я определенно не делал их в 4 утра вчера вечером). Я отследил причину до контейнера Nextcloud (но я думаю, что это проблема Docker, поэтому мой вопрос здесь...):

В журнале обратного прокси-сервера Nginx есть следующая строка:

2022/04/06 20:16:45 [error] 10#10: *3 nextcloud-app could not be resolved (3: Host not found), client: 10.135.40.1, server: <redacted>, request: "GET / HTTP/1.1", host: "<redacted>"

Nginx не может разрешить внутренний сервер и возвращает клиенту ошибку 502/Bad Gateway.

Я проверил, и имя хоста для контейнера Nextcloud ("nextcloud-app") действительно не зарегистрировано в docker-internal DNS (доступно по адресу 127.0.0.11 в каждом контейнере). Я могу войти в любой из контейнеров и отправить DNS-запрос (после запуска after apt-get update && apt-get install iputils-ping dnsutilsвнутри контейнера(ов)), имя "nextcloud-app" нигде не разрешается. Пример:

root@nextcloud-app:/var/www/html# nslookup nextcloud-app
Server:     127.0.0.11
Address:    127.0.0.11#53

** server can't find nextcloud-app: NXDOMAIN

Все остальные имена контейнеров разрешаются так, как и должны. Разрешение внешних адресов также работает. "nextcloud-app" — этотольконеразрешимое имя контейнера.

Однако яможетping к контейнеру nextcloud-app и из него напрямую с использованием внутренних IP-адресов docker. Связь есть, только разрешение DNS не работает.

Я понятия не имею, как это отлаживать дальше. Я не трогал свой файл compose.yml неделю. Насколько мне известно, ничего не изменилось. Но настройка перестала работать в одночасье.

Как заставить контейнер Nextcloud зарегистрировать собственное имя хоста на внутреннем DNS-сервере docker? Любые предложения приветствуются.

решение1

Я нашел решение. Этот ответ для бедняги, который, возможно, столкнется с той же проблемой в будущем.

Оказалось, что проблема была не в докере. Nextcloud перешел в режим обслуживания ночью (по неизвестным пока причинам, придется разбираться дальше). Каким-то образом образ докера Nextcloud не смог зарегистрироваться в DNS Docker (из-за ошибки в образе?) в режиме обслуживания, и ситуация зашла в тупик: нет разрешения DNS, нет доступа к Nextcloud через обратный прокси-сервер --> не замечаем, что Nextcloud находится в режиме обслуживания --> остаемся в режиме обслуживания навсегда, нет разрешения DNS, ...

Если бы я только подумал проверить, находится ли Nextcloud в режиме обслуживания, это могло бы сэкономить мне несколько часов отладки и чесания головы. Вывести Nextcloud из режима обслуживания было/есть делом нескольких минут. Чувствую себя немного глупо прямо сейчас. ;-)

Связанный контент