Tenho tentado executar o Docker build em vários arquivos que funcionavam anteriormente, que agora não estão mais funcionando.
Assim que o arquivo Docker incluísse qualquer linha para instalar o software, ele iria falhar com uma mensagem dizendo que o pacote não foi encontrado.
RUN apt-get -y install supervisor nodejs npm
A mensagem comum que apareceu nos logs foi
Could not resolve 'archive.ubuntu.com'
Alguma ideia de por que algum software não instala?
newgrp docker
vez de fazer um logoff completo e fazer o login depois de me entregarsudo usermod -aG docker myuserid
... é um caso extremo para com certeza, no entanto, aconteceRespostas:
Descomentando
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
em/etc/default/docker
como Matt portador sugeriu que não funciona para mim. Nem colocar os servidores DNS da minha empresa nesse arquivo. Mas, há outra maneira (continue lendo).Primeiro, vamos verificar o problema:
Se o comando parecer travar, mas eventualmente exibir o erro "não é possível resolver 'google.com'", você tem o mesmo problema que eu.
O
nslookup
comando consulta o servidor DNS 8.8.8.8 para transformar o endereço de texto de 'google.com' em um endereço IP. Ironicamente, 8.8.8.8 é o servidor DNS público do Google . Senslookup
falhar, os servidores DNS públicos como 8.8.8.8 podem ser bloqueados pela sua empresa (o que presumo que seja por razões de segurança).Você pensaria que adicionar os servidores DNS da sua empresa ao
DOCKER_OPTS
in/etc/default/docker
deveria resolver, mas por algum motivo, não funcionou para mim. Eu descrevo o que funcionou para mim abaixo.SOLUÇÃO :
No host (estou usando o Ubuntu 16.04), descubra os endereços de servidor DNS primário e secundário:
Usando esses endereços, crie um arquivo
/etc/docker/daemon.json
:Coloque isso em
/etc/docker/daemon.json
:Sair da raiz:
Agora reinicie o docker:
VERIFICAÇÃO :
Agora, verifique se adicionar o
/etc/docker/daemon.json
arquivo permite que você resolva 'google.com' em um endereço IP:REFERÊNCIAS :
Baseei minha solução em um artigo de Robin Winslow, que merece todo o crédito pela solução. Obrigado, Robin!
"Corrigir configuração DNS de rede do Docker." Robin Winslow. Retirado 2016-11-09. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
fonte
nslookup google.com 8.8.8.8
No meu caso é assim que eu recebi este erroconnection timed out; no servers could be reached
/etc/default/docker
não funcionou para algumas pessoas é (citando um comentário do arquivo)# THIS FILE DOES NOT APPLY TO SYSTEMD
Depois de muita dor de cabeça, encontrei a resposta.
Could not resolve 'archive.ubuntu.com'
pode ser corrigido fazendo as seguintes alterações:Remova o comentário da seguinte linha em
/etc/default/docker
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
Reinicie o serviço Docker
sudo service docker restart
Exclua todas as imagens que armazenaram em cache as configurações de DNS inválidas.
O crédito vai para Andrew SB
fonte
docker build --no-cache=true ...
docker build --no-cache=true -t docker-whale .
mas nada diferente parece ter acontecido.Tive o mesmo problema, mas nem a descomentar as entradas de dns de / etc / default / docker nem editar o /etc/resolv.conf no contêiner de compilação ou o /etc/docker/daemon.json me ajuda.
Mas depois de criar com a opção --network = host, a resolução funcionou novamente.
Talvez isso ajude alguém novamente.
fonte
Acredito que a resposta de Matt Carrier seja a solução correta para este problema. No entanto, depois de implementá-lo, eu ainda observado o mesmo comportamento:
could not resolve 'archive.ubuntu.com'
.Isso me levou a descobrir que a rede à qual eu estava conectado estava bloqueando o DNS público. A solução para esse problema era configurar meu contêiner Docker para usar o mesmo servidor de nomes que meu host (a máquina na qual eu estava executando o Docker) estava usando.
Como eu fiz a triagem:
docker run -it docker/whalesay bash
ping 172.217.4.238
(google.com)ping google.com
No meu caso, o primeiro
ping
resultou em respostas, o segundo não.Como eu consertei:
Assim que descobri que o DNS não estava funcionando dentro do contêiner, verifiquei que poderia duplicar o mesmo comportamento no host.
nslookup google.com
resolvido muito bem no host. Mas,nslookup google.com 8.8.8.8
ounsloookup google.com 8.8.4.4
expirou.Em seguida, encontrei o (s) servidor (es) de nomes que meu host estava usando ao executar
nm-tool
(no Ubuntu 14.04). Na veia de um feedback rápido, comecei a imagem exemplo de novo, e adicionou o endereço IP do servidor de nome para o arquivo resolv.conf do container:sudo vi /etc/resolv.conf
. Depois de salvo, tentei fazer o ping novamente (ping google.com
) e desta vez funcionou!Observe que as alterações feitas no resolv.conf do contêiner não são persistentes e serão perdidas nas reinicializações do contêiner. No meu caso, a solução mais adequada foi adicionar o endereço IP do servidor de nomes da minha rede ao
/etc/default/docker
arquivo do host .fonte
nmcli device show <interfacename> | grep IP4.DNS
(Ubuntu> = 15) enmcli dev list iface <interfacename> | grep IP4
(Ubuntu <15). Crédito: Marty Fried .Depois de adicionar ip dns local ao arquivo docker padrão, ele começou a funcionar para mim ... encontre as etapas abaixo ...
Agora vá em frente e construa o docker ... :)
fonte
Para quem também está tendo esse problema, resolvi meu problema editando o
/etc/default/docker
arquivo, conforme sugerido por outras respostas e perguntas. Porém não tinha ideia de qual IP usar como DNS.Só depois de um tempo descobri que precisava executar
ifconfig docker
no host para mostrar o IP da interface de rede do docker.Foi
172.17.0.1
no meu caso. Espero que isso ajude todos que também estão tendo esse problema.fonte
ifconfig docker0
Eu encontrei essa resposta depois de pesquisar no Google. Estou usando o Windows, portanto, algumas das respostas acima não se aplicam ao meu sistema de arquivos.
Basicamente, execute:
Que apenas sobrescreve o servidor de nomes existente usado com
8.8.8.8
eu acredito. Funcionou para mim!Com base em alguns comentários, você pode ter que ser root. Para fazer isso, problema
sudo -i
.fonte
ssh
não existe?sudo -i
uma vez que você estáEu só queria adicionar uma resposta tardia para qualquer pessoa que encontrar esse problema nos mecanismos de pesquisa.
NÃO faça isso: eu costumava ter uma opção em / etc / default / docker para definir
iptables=false
. Isso aconteceu porque o ufw não funcionou (tudo foi aberto, embora apenas 3 portas fossem permitidas), então eu segui cegamente a resposta a esta pergunta: O Firewall Descomplicado (UFW) não está bloqueando nada ao usar o Docker e este, que estava vinculado no comentáriosTenho um conhecimento muito baixo das regras de iptables / nat / roteamento em geral, por isso devo ter feito algo irracional.
Provavelmente o configurei incorretamente e eliminei a resolução DNS dentro de meus contêineres. Quando executei um terminal de contêiner interativo:
docker run -i -t ubuntu:14.04 /bin/bash
Tive estes resultados:
Reverter todas as minhas configurações de ufw (before.rules), desabilitar ufw e remover iptables = false de / etc / default / docker restaurou a funcionalidade de resolução DNS dos contêineres.
Agora estou ansioso para reativar a funcionalidade do ufw, seguindo estas instruções .
fonte
Eu tenho o mesmo problema e tentei as etapas mencionadas, mas parece que nada funciona até atualizar as configurações de rede.
Os passos:
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ip-masq=true"
a/etc/default/docker
.iptables -t nat -F POSTROUTING
. Depois de executar isso, reinicie o docker e ele inicializará a tabela nat com o novo intervalo de IP.fonte
O mesmo problema para mim (no Ubuntu Xenial).
docker run --dns ...
para recipientes trabalhados.docker build
(docker-compose etc.) não funcionou.Depois de analisar os logs do docker (
journalctl -u docker.service
), foi encontrado algum aviso sobre resolvconf ruim aplicado.Depois disso, descobri que nossos servidores de nomes corporativos foram adicionados às interfaces de rede, mas não no resolvconf.
Apliquei esta solução Como configuro meu DNS estático nas interfaces? (askubuntu) , ou seja, adicionar servidores de nomes a
/etc/resolvconf/resolv.conf.d/tail
Depois de atualizar o resolvconf (ou reiniciar).
bash docker run --rm busybox nslookup google.com
funcionou instantaneamente.
Todas as minhas compilações docker-compose estão funcionando agora.
fonte
Tive o mesmo problema hoje, acabei de adicionar a linha abaixo em / etc / default / docker
e reiniciei meu laptop.
No meu caso, reiniciar o docker daemon não é suficiente para mim, eu tenho que reiniciar meu laptop para fazê-lo funcionar.
fonte
Antes de gastar muito tempo com qualquer uma das outras soluções, simplesmente reinicie o Docker e tente novamente.
Resolvi o problema para mim, usando o Docker Desktop para Windows no Windows 10.
fonte
Eu tenho lutado por algum tempo com isso agora também, mas aqui está o que resolveu para mim
Ubuntu 16.04 x64
. Espero que economize o tempo de alguém também.In
/etc/NetworkManager/NetworkManager.conf
: comentar#dns=dnsmasq
Criar (ou modificar)
/etc/docker/daemon.json
:sudo service docker restart
fonte
No meu sistema (
macOS High Sierra 10.13.6
comDocker 2.1.0.1
) isso era devido a um proxy corporativo.Resolvi isso em duas etapas:
Preferences>Proxies
Adicione as mesmas configurações ao seu config.json,
~/.docker/config.json
como:fonte