O contêiner do Docker não registra o nome do host no DNS interno do docker

O contêiner do Docker não registra o nome do host no DNS interno do docker

Eu uso o Docker para implementar um serviço Nextcloud. Para isso, utilizo a imagem oficial nextcloud-apache, um proxy reverso Nginx, certbot e MariaDB. Nada de especial, realmente.

Minha instância do docker é executada no modo swarm. Todos os contêineres são executados junto com o gerenciador no mesmo host com apenas uma réplica para cada serviço, rede(s) de sobreposição padrão. O enxame é iniciado usando um arquivo de composição padrão.

Minha configuração funcionou estável por muitos meses, até ontem à noite, quando quebrou misteriosamente. Pelo que vejo, não houve nenhuma atualização ou reinicialização, nem para o sistema operacional (Ubuntu Server LTS), Docker-CE ou qualquer uma das imagens (eu faço todas as minhas atualizações manualmente em intervalos regulares e certamente não as fiz em 4 da manhã de ontem à noite). Rastreei a causa até o contêiner Nextcloud (mas acho que este é um problema do Docker, daí minha pergunta aqui...):

O log do proxy reverso Nginx mostra a seguinte linha:

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>"

O Nginx não consegue resolver o servidor back-end e envia um gateway 502/Bad de volta ao cliente.

Eu verifiquei e o nome do host do contêiner Nextcloud ("nextcloud-app") realmente não está registrado no DNS interno do docker (disponível em 127.0.0.11 em cada contêiner). Posso fazer login em qualquer um dos contêineres e disparar uma solicitação de DNS (depois de executar after apt-get update && apt-get install iputils-ping dnsutilsdentro do (s) contêiner (es)), o nome "nextcloud-app" não é resolvido em lugar nenhum. Exemplo:

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

Todos os outros nomes de contêineres são resolvidos como deveriam. A resolução de endereços externos também funciona. "nextcloud-app" é oapenasnome do contêiner insolúvel.

No entanto, eupodeping de e para o contêiner nextcloud-app usando diretamente os endereços IP internos do docker. A conectividade existe, apenas a resolução DNS falha.

Não tenho ideia de como depurar isso ainda mais. Não toquei no meu arquivo compose.yml por uma semana. Pelo que eu sei, nada mudou. No entanto, a configuração parou de funcionar durante a noite.

Como posso forçar o contêiner Nextcloud a registrar seu próprio nome de host no DNS interno do docker? Qualquer sugestão será apreciada.

Responder1

Eu encontrei a solução. Esta resposta é para o pobre rapaz que talvez enfrente o mesmo problema no futuro.

Acontece que, afinal, não era um problema do docker. Nextcloud entrou em modo de manutenção durante a noite (por motivos ainda desconhecidos, será necessário investigar isso a seguir). De alguma forma, a imagem docker Nextcloud não conseguiu se registrar no DNS do Docker (por causa de um bug na imagem?) Quando estava no modo de manutenção e a situação ficou em um impasse: Sem resolução de DNS, sem acessibilidade ao Nextcloud por meio de proxy reverso -> sem perceber que Nextcloud está em modo de manutenção -> permanecendo em modo de manutenção para sempre, sem resolução de DNS, ...

Se eu tivesse pensado em verificar se o Nextcloud estava em modo de manutenção, isso poderia ter me poupado várias horas de depuração e confusão. Tirar o Nextcloud do modo de manutenção foi/é questão de alguns minutos. Me sentindo um pouco estúpido agora. ;-)

informação relacionada