Configurazione Docker “Imansible risolvere ‘archive.ubuntu.com'” apt-get non riesce ad installare nulla

Ho cercato di eseguire build Docker su vari file precedentemente funzionanti, che ora non funzionano più.

Non appena il file Docker includeva una linea che doveva installare il software, falliva con un messaggio che diceva che il pacchetto non era stato trovato.

RUN apt-get -y install supervisor nodejs npm 

Il messaggio comune che si presentava nei log era

 Could not resolve 'archive.ubuntu.com' 

Qualche idea sul perché nessun software si installa?

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4" in /etc/default/docker come suggerito da Matt Carrier NON ha funzionato per me. Né ha messo i server DNS della mia società in quel file. Ma, c’è un altro modo (continua a leggere).

Innanzitutto, verifichiamo il problema:

 $ docker run busybox nslookup google.com # takes a long time nslookup: can't resolve 'google.com' # <--- appears after a long time Server: 8.8.8.8 Address 1: 8.8.8.8 

Se il comando sembra bloccarsi, ma alla fine sputa l'errore "imansible risolvere 'google.com'", allora hai lo stesso problema di me.

Il comando nslookup interroga il server DNS 8.8.8.8 per trasformare l'indirizzo di testo di "google.com" in un indirizzo IP. Ironicamente, 8.8.8.8 è il server DNS pubblico di Google . Se nslookup fallisce, i server DNS pubblici come 8.8.8.8 potrebbero essere bloccati dalla tua azienda (che presumo sia per motivi di sicurezza).

DOCKER_OPTS che aggiungere i server DNS della tua azienda a DOCKER_OPTS in /etc/default/docker dovrebbe fare il trucco, ma per qualche ragione, non ha funzionato per me. Descrivo cosa ha funzionato per me qui sotto.

SOLUZIONE :

Sull'host (sto usando Ubuntu 16.04), trova gli indirizzi del server DNS primario e secondario:

 $ nmcli dev show | grep 'IP4.DNS' IP4.DNS[1]: 10.0.0.2 IP4.DNS[2]: 10.0.0.3 

Usando questi indirizzi, crea un file /etc/docker/daemon.json :

 $ sudo su root # cd /etc/docker # touch daemon.json 

Metti questo in /etc/docker/daemon.json :

 { "dns": ["10.0.0.2", "10.0.0.3"] } 

Esci da root:

 # exit 

Ora riavvia la finestra mobile:

 $ sudo service docker restart 

VERIFICA :

Ora verifica che l'aggiunta del file /etc/docker/daemon.json ti permetta di risolvere 'google.com' in un indirizzo IP:

 $ docker run busybox nslookup google.com Server: 10.0.0.2 Address 1: 10.0.0.2 Name: google.com Address 1: 2a00:1450:4009:811::200e lhr26s02-in-x200e.1e100.net Address 2: 216.58.198.174 lhr25s10-in-f14.1e100.net 

RIFERIMENTI :

Ho basato la mia soluzione su un articolo di Robin Winslow, che merita tutto il merito della soluzione. Grazie, Robin!

Msgstr "Correggi la configurazione DNS di rete di Docker." Robin Winslow. Estratto il 09/11/2016. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/

Dopo tanto mal di testa ho trovato la risposta. Could not resolve 'archive.ubuntu.com' può essere risolto apportando le seguenti modifiche:

  1. Decommentare la seguente riga in /etc/default/docker
    DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

  2. Riavvia il servizio Docker. Il sudo service docker restart servizio sudo service docker restart

  3. Elimina le immagini che hanno memorizzato nella cache le impostazioni DNS non valide.

  4. Costruisci di nuovo e il problema dovrebbe essere risolto.

Il merito va a Andrew SB

Credo che la risposta di Matt Carrier sia la soluzione corretta per questo problema. Tuttavia, dopo averlo implementato, ho comunque osservato lo stesso comportamento: could not resolve 'archive.ubuntu.com' .

Questo mi ha portato a scoprire che la rete a cui ero connesso stava bloccando il DNS pubblico. La soluzione a questo problema era configurare il mio contenitore Docker per utilizzare lo stesso server dei nomi che il mio host (la macchina da cui stavo usando Docker) stava usando.

Come ho triaged:

  1. Poiché stavo lavorando alla documentazione di Docker, avevo già un’immagine di esempio installata sulla mia macchina. Sono stato in grado di avviare un nuovo contenitore per eseguire quell’immagine e creare una nuova sessione bash in quel contenitore: docker run -it docker/whalesay bash
  2. Il contenitore ha una connessione Internet ?: ping 172.217.4.238 (google.com)
  3. Il contenitore può risolvere i nomi degli host? ping google.com

Nel mio caso, il primo ping prodotto risposte, il secondo no.

Come ho risolto:

Una volta scoperto che il DNS non funzionava all’interno del contenitore, ho verificato che potevo duplicare lo stesso comportamento sull’host. nslookup google.com risolto nslookup google.com sull’host. Tuttavia, è nslookup google.com 8.8.8.8 o nsloookup google.com 8.8.4.4 .

Successivamente, ho trovato il nome del server (s) che il mio ospite stava usando eseguendo nm-tool (su Ubuntu 14.04). In vena di feedback rapido, ho riavviato l’immagine di esempio e aggiunto l’indirizzo IP del name server al file resolv.conf del contenitore: sudo vi /etc/resolv.conf . Una volta salvato, ho tentato di nuovo il ping ( ping google.com ) e questa volta ha funzionato!

Si noti che le modifiche apportate al resolv.conf del contenitore non sono persistenti e andranno perse durante i riavvii del contenitore. Nel mio caso, la soluzione più appropriata era quella di aggiungere l’indirizzo IP del server dei nomi della mia rete al /etc/default/docker dell’host.

Dopo aver aggiunto il dns ip locale al file docker predefinito, ha iniziato a funzionare per me … si prega di trovare i seguenti passaggi …

 $ nm-tool # (will give you the dns IP) 

DNS: 172.168.7.2

 $ vim /etc/default/docker # (uncomment the DOCKER_OPTS and add DNS IP) DOCKER_OPTS="--dns 172.168.7.2 --dns 8.8.8.8 --dns 8.8.4.4" $ rm `docker ps --no-trunc -aq` # (remove all the containers to avoid DNS cache) $ docker rmi $(docker images -q) # (remove all the images) $ service docker restart #(restart the docker to pick up dns setting) 

Ora vai avanti e costruisci la finestra mobile … 🙂

Volevo solo aggiungere una risposta tardiva per chiunque si imbattesse in questo problema dai motori di ricerca.

NON farlo: avevo l’opzione in / etc / default / docker per impostare iptables=false . Questo perché ufw non funzionava (tutto è stato aperto anche se erano permesse solo 3 porte) quindi ho seguito ciecamente la risposta a questa domanda: Uncomplicated Firewall (UFW) non sta bloccando nulla quando si usa Docker e questo, che era collegato nel Commenti

Ho una comprensione molto bassa delle regole di iptables / nat / routing in generale, quindi perché avrei potuto fare qualcosa di irrazionale.

Si scopre che probabilmente l’ho configurato male e ho ucciso la risoluzione DNS nei miei contenitori. Quando ho eseguito un terminale di contenitore interattivo: docker run -i -t ubuntu:14.04 /bin/bash

Ho avuto questi risultati:

 [email protected]:/# ping google.com ping: unknown host google.com [email protected]:/# cat /etc/resolv.conf search online.net nameserver 8.8.8.8 nameserver 8.8.4.4 [email protected]:/# ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=1.76 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=1.72 ms 

Ripristinando tutta la configurazione ufw (before.rules), disabilitando ufw e rimuovendo iptables = false da / etc / default / docker è stata ripristinata la funzionalità di risoluzione DNS dei container.

Ora non vedo l’ora di ritriggersre la funzionalità ufw seguendo queste istruzioni .

Per chiunque abbia anche questo problema, ho risolto il mio problema modificando il /etc/default/docker , come suggerito da altre risposte e domande. Comunque non avevo idea di quale IP usare come DNS.

Solo dopo un po ‘ho capito che dovevo eseguire ifconfig docker sull’host per mostrare l’IP per l’interfaccia di rete docker.

 docker0 Link encap:Ethernet Endereço de HW 02:42:69:ba:b4:07 inet end.: 172.17.0.1 Bcast:0.0.0.0 Masc:255.255.0.0 endereço inet6: fe80::42:69ff:feba:b407/64 Escopo:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Métrica:1 pacotes RX:8433 erros:0 descartados:0 excesso:0 quadro:0 Pacotes TX:9876 erros:0 descartados:0 excesso:0 portadora:0 colisões:0 txqueuelen:0 RX bytes:484195 (484.1 KB) TX bytes:24564528 (24.5 MB) 

Era 172.17.0.1 nel mio caso. Spero che questo aiuti chiunque abbia anche questo problema.

Ho trovato questa risposta dopo alcuni Googleing. Sto usando Windows, quindi alcune delle risposte di cui sopra non si applica al mio file system.

In pratica:

 docker-machine ssh default echo "nameserver 8.8.8.8" > /etc/resolv.conf 

Che sovrascrive il server dei nomi esistente usato con 8.8.8.8 credo. Ha funzionato per me!

Ho lo stesso problema e ho provato i passaggi indicati, ma sembra che nessuno funzioni fino a quando non aggiorno le impostazioni di rete.

I passi:

  1. Come già detto, aggiungi DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ip-masq=true" a /etc/default/docker .
  2. Lavare manualmente il contenuto della tabella PREROUTING usando iptables -t nat -F POSTROUTING . Dopo aver eseguito ciò, riavviare la finestra mobile e inizializzerà la tabella nat con il nuovo intervallo IP.

Stesso problema per me (su Ubuntu Xenial).

  • docker run --dns ... per i contenitori funzionanti.
  • L’aggiornamento delle opzioni del daemon docker per la docker build mobile (docker-compose, ecc.) Non ha funzionato.

Dopo aver analizzato i registri della journalctl -u docker.service ( journalctl -u docker.service ), se è stato trovato qualche avvertimento su bad resolvconf applicato.

In seguito ho scoperto che i nostri server dei nomi aziendali sono stati aggiunti alle interfacce di rete ma non in resolvconf.

Applicata questa soluzione Come configurare il mio DNS statico nelle interfacce? (askubuntu) , cioè aggiungendo i nameserver a /etc/resolvconf/resolv.conf.d/tail

Dopo aver aggiornato resolvconf (o riavviato).

bash docker run --rm busybox nslookup google.com

ha funzionato all’istante

Tutte le mie build di docker-compongono funzionano ora.

Mi imbatto nello stesso problema, ma neiter le voci in comune / etc / default / docker dns, né modificando /etc/resolv.conf nel contenitore di build o /etc/docker/daemon.json mi aiuta.

Ma dopo aver creato con l’opzione –network = host la risoluzione è stata di nuovo valida.

 docker build --network=host -t my-own-ubuntu-like-image . 

Forse questo aiuterà di nuovo qualcuno.

Oggi ho lo stesso problema, ho aggiunto la riga qui sotto a / etc / default / docker

 DOCKER_OPTS="--dns 172.18.20.13 --dns 172.20.100.29 --dns 8.8.8.8" 

e poi ho riavviato il mio portatile.

Nel mio caso il riavvio del daemon docker non è abbastanza per me, devo riavviare il mio laptop per farlo funzionare.