Serviço 503 indisponível: como convencer o docker a atualizar suas dependências do ubuntu

Recentemente, eu estava tentando criar um contêiner de docker no meu MacOS e, assim, deparei com o problema de que o contêiner de docker não era capaz de baixar dependências do ubuntu.

Como meus colegas e eu levamos algum tempo para descobrir a solução para esse problema, espero que a documentação a seguir de nossa abordagem e a solução final o ajude a economizar algumas horas de pesquisa.

A mensagem de erro

Um dos contêineres de docker que recebi do meu cliente não foi construído na minha máquina. Para todos os meus colegas de equipe, funcionou perfeitamente. Mas meu terminal declarou que o serviço ubuntu não está disponível:

W: O repositório 'http://security.ubuntu.com/ubuntu xenial-security Release' não possui um arquivo de lançamento. W: O repositório 'http://archive.ubuntu.com/ubuntu xenial Release' não possui um arquivo de lançamento. W: O repositório 'http://archive.ubuntu.com/ubuntu xenial-updates Release' não possui um arquivo de lançamento. W: O repositório 'http://archive.ubuntu.com/ubuntu xenial-backports Release' não possui um arquivo de lançamento. E: Falha ao buscar http://security.ubuntu.com/ubuntu/dists/xenial-security/main/binary-amd64/ Serviço de Pacotes 503 Indisponível [IP: 91.189.91.14 80] E: Falha ao buscar http: // archive.ubuntu.com/ubuntu/dists/xenial/main/binary-amd64/Packages 503 Serviço indisponível [IP: 91.189.88.174 80] E: Falha ao buscar http://archive.ubuntu.com/ubuntu/dists/xenial -updates / main / binary-amd64 / Pacotes 503 Serviço indisponível [IP: 91.189.88.174 80] E: Falha ao buscar http://archive.ubuntu.com/ubuntu/dists/xenial-backports/main/binary-amd64/ Pacotes 503 Serviço indisponível [IP: 91.189.88.162 80] E: Falha no download de alguns arquivos de índice. Eles foram ignorados, ou antigos usados ​​em seu lugar.

Primeiramente, verifiquei se os IPs são realmente acessíveis na minha máquina local:

wget http://security.ubuntu.com/ubuntu wget http://archive.ubuntu.com/ubuntu

Ambos os endereços podem ser resolvidos e alcançados. Para excluir um possível efeito colateral de qualquer outro comando no Dockerfile, criei um Dockerfile simples que cria apenas um ambiente ubuntu.

DO ubuntu: 16.04 EXECUTAR o apt-get update CMD [“/ bin / bash”]

Também não funcionou e resultou nas mesmas 503 mensagens de erro.

O Google obteve sucesso com o seguinte artigo que sugeria verificar as entradas de DNS. Infelizmente, também não ajudou. Houve apenas algumas outras ocorrências com exatamente o mesmo código de erro. No entanto, nenhum forneceu uma solução.

Foi aí que começou o trabalho de detetive: desde que o código de erro 503 ocorreu, era provável que um proxy com comportamento inadequado estivesse envolvido. Mesmo assim, eu não tinha conhecimento de nenhum proxy em execução. Por isso, comecei a verificar todos os pontos da minha máquina em que algumas sobras de uma antiga instalação de proxy podem se esconder:

1. Verifique o arquivo cntlm.conf

Verifique se você consegue identificar alguma linha suspeita no seu arquivo cntlm.conf. Você pode encontrar este arquivo em /usr/local/etc/cntlm.conf

2. Verifique o arquivo do host

Verifique no seu hostfile as entradas intervenientes. Você pode encontrar o arquivo em / etc / hosts

3. Verifique as configurações de proxy de rede

Vá para as Preferências do sistema no seu Mac. Abra a seção Rede, selecione sua rede atual, vá para Avançado> Proxies e verifique as configurações.

Talvez uma das etapas acima já tenha resolvido seu problema. No meu caso, não ajudou. Depois de passar horas basicamente repletas de reiterar as etapas acima, finalmente cheguei a um local bastante óbvio - mas para mim bastante oculto -:

4. Configurações de proxy do Docker Desktop

Verifique as configurações de proxy do aplicativo Docker Desktop.

Se o Proxy manual estiver ativado, talvez seja isso. Pelo menos, foi isso que resolveu o problema para mim: o Docker não estava usando o proxy do sistema, mas um manual que deve ter sido configurado acidentalmente semanas atrás. Após mudar a configuração para System Proxy, os dois Dockerfiles funcionaram perfeitamente.