![O contêiner do Docker não registra o nome do host no DNS interno do docker](https://rvso.com/image/776313/O%20cont%C3%AAiner%20do%20Docker%20n%C3%A3o%20registra%20o%20nome%20do%20host%20no%20DNS%20interno%20do%20docker.png)
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 dnsutils
dentro 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. ;-)