Problema de DNS com o docker do APT no Ubuntu Linux 18.04 (request canceled Timeout)
Nesta aula aprendemos como consertar um problema de timeout que acontece com o docker do APT no Ubuntu 18.04:
request canceled while waiting for connection (Client.Timeout exceeded white awaiting headers)
Depois de instalar o pacote docker com o APT e tentar puxar uma imagem de Docker, o erro acima pode ocorrer devido à uma configuração defeituosa de DNS (Domain Name Server).
Ubuntu 18.04 usa systemd-resolve para resolver nomes de domínio.
Observamos a seguinte linha no arquivo /etc/resolv.conf:
nameserver 127.0.0.53
Precisamos mudar o IP do nameserver para um que funcione.
Note também que o arquivo /etc/resolv.conf é um link simbólico para /run/systemd/resolve/stub-resolv.conf
Podemos usar um aplicativo de GUI (Graphical User Interface) do Ubuntu para modificar o valor em questão: abra o painel de Configurações, depois clique na aba de Rede. Clique no ícone de engrenagem para modificar as configurações da sua conexão. No vídeo a conexão foi por cabo, então foi clicado o ícone de engrenagem para abrir as configurações de PCI Ethernet. Depois disso, na nova janela clique na aba de IPv4. Digite 1.1.1.1 na caixa de texto para o valor de DNS. Esse IP é do resolvedor de DNS público operado pelo Cloudflare. Clique Aplicar para salvar a configuração. Clique no interruptor para desconectar a conexão (do lado do ícone de engrenagem), depois ligue novamente.
Verique o conteúdo do arquivo /run/systemd/resolve/resolv.conf, que agora deve ter a seguinte linha:
nameserver 1.1.1.1
Teste o docker e veja que não tem mais problema:
docker pull hello-world
O estado do systemd-resolve também pode ser verificado com o seguinte comando:
systemd-resolve --status
Você deve encontrar o valor 1.1.1.1 na saída do comando acima. Para achar mais rápido, use o grep:
Resumo do Problema de DNS no Ubuntu 18.04 com Docker
Introdução
No Ubuntu 18.04, ao instalar o Docker e tentar baixar uma imagem, um problema de DNS foi encontrado, resultando em mensagens de timeout.
Problema Identificado
O comando docker pull hello-world falhou devido a um erro de timeout relacionado ao DNS.
O arquivo /etc/resolv.conf mostrava um nameserver configurado como 127.0.0.53, o que estava gerando problemas.
Solução
Identificação do Gerenciador de DNS:
O Ubuntu 18.04 utiliza systemd-resolved para gerenciar a resolução de nomes de domínio.
O arquivo /etc/resolv.conf é um link simbólico para /run/systemd/resolve/stub-resolv.conf.
Adicionando um Nameserver:
Acesse as configurações de rede e clique na engrenagem da interface de rede ativa.
Vá até IPv4 e adicione um nameserver, como 1.1.1.1 (Cloudflare) ou 8.8.8.8 (Google), na seção de DNS.
Reinicie a Conexão de Rede:
Desconecte e reconecte a interface de rede para que as novas configurações sejam aplicadas.
Verificação das Configurações:
Verifique o arquivo /run/systemd/resolve/resolv.conf para garantir que o novo nameserver esteja presente.
Utilize o comando systemd-resolve --status para confirmar a configuração e verificar se o nameserver aparece corretamente.
Resultado
Após a configuração correta do nameserver, o comando docker pull hello-world funcionou sem problemas, resolvendo assim a questão de DNS.
Agradecimentos
Obrigado por acompanhar este tutorial!
Video Transcript
No Ubuntu 18.04, quando eu instalei o pacote Docker e tentei puxar ou baixar uma imagem
só para testar, não funcionou na primeira vez e isso me levou a encontrar um problema de DNS,
Domain Name Server, servidor de nome de domínio, isso porque no Ubuntu 18.04 ele usa o
SystemDResolve para resolver os nomes de domínio. Então vou te mostrar o problema que eu tive e como
consertar. Então se eu falar DockerPool qualquer imagem, por exemplo a imagem do Hello World aqui que tem no Docker Hub,
ele vai dar o time out depois de esperar um tempo.
Então ocorreu um erro, ErrorResponseFromDemon, get o registro DockerItalItalNet.htp, requestCancel
o pedido foi cancelado porque deu time out, client time out e isso devia ao problema de DNS. Seu
fono arquivo barraetc barra resolve.conf resolv.conf, eu vejo aqui que tem uma entrada, uma linha que diz
NameServer, passos 127.0.0.5.3 e esse aqui está causando problema e como adiantar isso a gente tem que
encontrar uma maneira de adicionar o NameServer para ele poder resolver e poder baixar do Docker Hub.
Mas como fazer isso? Note que esse arquivo ele diz aqui que é gerenciado pelo SystemDeresolve,
então ele fala não é git. Então esse é o primeiro problema, o etc barra resolve os
name space 127.0.0.5.3. Mas na onde é que vem isso? Você nota ele vem dessa parte daqui,
barra run, barra systemd, barra resolve, barra stub, praço resolve.conf, se eu copiar esse dá o cap aqui.
Você note que é o mesmo arquivo e ele até dá o same link, se eu dar ls pra sua alieado até ser resolve.conf,
ele é um link para o run systemd resolve stub resolve.conf. Mas a gente vai precisar adicionar o NameServer,
então vamos, vou fazer o seguinte, vou usar GuidoMundo, então vou clicar lá
nas configurações, rede, e eu estou conectado com cabo, então meu caso aqui é PCI,
e internet, e estou conectado aqui e tem as engrenagens, vou clicar no icon da engrenagem
pra abrir as opções e vou pra IPv4 na parte de DNS que significa domain name server,
servidor de nome de domínio, tá automático, mas eu também posso adicionar
name servers adicionais separados com vírgula, tá? Um exemplo de um name server que você pode
usar é 1111, 4-1, que é do Cloudflare, outro name server público popular da Google, que são 4-8,
8.8.8.8, né? Então vou usar 1.1.1.1, 4-1, e vou clicar, clicar, agora tem um detalhe,
você desconecta aqui e conecta de novo, agora você note se você for no
arquivo aqui que eu vou te mostrar, é barra run, barra systemd, bar resolve, bar resolve.conf,
se você dá o cat nele, agora aparece como na outra entrada o name server 1111, que eu adicionei,
tá? Isso em...
esse outro aqui é o do meu roteador e note que é diferente do etc resolve.conf,
caso do systemd resolve ele usa esse próprio DNS que de alguma maneira ele alcança o meu roteador
e ele usava o name server, mas o negócio do Docker não funciona direito com isso,
então eu tenho que adicionar explicitamente um name server aqui para que apareça no arquivo run
systemd resolve resolve.conf e com isso o Docker não vai ter mais problema,
se eu falar de novo Docker pull, hello, traço world, ele vai baixar sem problema.
E você pode checar também com systemd traço resolve, opção traço traço status, esse comando
aqui te mostra os status do negócio e vai estar lá no final você pode ver name server,
deixa eu dar o grape aqui do 1.1.1 que ele aparece lá, certo? Nesse status.
Ignore esse aqui que eu não... não tenho a palavra name server, eu botei o IP aqui
para ver se aparece lá, você pode tirar o grape que eu botei o grape só para te mostrar
essas informações específicas, mas o seu sistema vai mostrar tudo, se você tirar o grape
você vai lá para baixo e vê, está certo? Então esse é o problema resolvido, se você
instalar o Docker do apt num 0.18.04, tem esse lance do systemd resolve, você tem que adicionar
um name server lá na agui, nas suas opções e não se esqueça de desconectar e conectar
novamente para que o name server apareça naquele arquivo que a gente viu, run, barra run, barra
systemd, barra resolve, barra resolve.conf. Muito obrigado por assistir e até a próxima.