Ich habe versucht, Docker Build auf verschiedenen Dateien auszuführen, die zuvor funktionierten und jetzt nicht mehr funktionieren.
Sobald die Docker-Datei eine Zeile enthielt, in der Software installiert werden sollte, schlug die Meldung fehl, dass das Paket nicht gefunden wurde.
RUN apt-get -y install supervisor nodejs npm
Die allgemeine Meldung, die in den Protokollen angezeigt wurde, war
Could not resolve 'archive.ubuntu.com'
Irgendeine Idee, warum keine Software installiert wird?
newgrp docker
anstatt mich vollständig abzumelden und mich dann anzumelden, nachdem ich mich selbst gegeben habesudo usermod -aG docker myuserid
... es ist ein Vorteil für sicher, aber es passiertAntworten:
Uncommenting
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
in/etc/default/docker
als Matt Träger vorgeschlagen hat nicht für mich arbeiten. Auch die DNS-Server meines Unternehmens wurden nicht in diese Datei aufgenommen. Aber es gibt noch einen anderen Weg (lesen Sie weiter).Lassen Sie uns zunächst das Problem überprüfen:
Wenn der Befehl zu hängen scheint, aber schließlich den Fehler "google.com kann nicht behoben werden" ausspuckt, haben Sie das gleiche Problem wie ich.
Der
nslookup
Befehl fragt den DNS-Server 8.8.8.8 ab, um die Textadresse von 'google.com' in eine IP-Adresse umzuwandeln. Ironischerweise ist 8.8.8.8 der öffentliche DNS-Server von Google . Wenn diesnslookup
fehlschlägt, werden öffentliche DNS-Server wie 8.8.8.8 möglicherweise von Ihrem Unternehmen blockiert (was aus Sicherheitsgründen angenommen wird).Sie würden denken, dass das Hinzufügen von DNS-Servern Ihres Unternehmens zu
DOCKER_OPTS
in/etc/default/docker
den Trick machen sollte, aber aus irgendeinem Grund hat es bei mir nicht funktioniert. Ich beschreibe unten, was für mich funktioniert hat.LÖSUNG :
Ermitteln Sie auf dem Host (ich verwende Ubuntu 16.04) die primären und sekundären DNS-Serveradressen:
Erstellen Sie mit diesen Adressen eine Datei
/etc/docker/daemon.json
:Geben Sie dies ein
/etc/docker/daemon.json
:Beenden Sie von root:
Starten Sie nun Docker neu:
ÜBERPRÜFUNG :
Überprüfen
/etc/docker/daemon.json
Sie nun, ob Sie durch Hinzufügen der Datei "google.com" in eine IP-Adresse auflösen können:REFERENZEN :
Ich habe meine Lösung auf einen Artikel von Robin Winslow gestützt, der alle Anerkennung für die Lösung verdient. Danke, Robin!
"Korrigieren Sie die Netzwerk-DNS-Konfiguration von Docker." Robin Winslow. Abgerufen am 09.11.2016. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
quelle
nslookup google.com 8.8.8.8
In meinem Fall ist es so, dass ich diesen Fehler bekamconnection timed out; no servers could be reached
/etc/default/docker
es für einige Leute nicht funktioniert hat, ist (zitiert einen Kommentar aus der Datei)# THIS FILE DOES NOT APPLY TO SYSTEMD
Nach vielen Kopfschmerzen fand ich die Antwort.
Could not resolve 'archive.ubuntu.com'
kann durch folgende Änderungen behoben werden:Kommentieren Sie die folgende Zeile aus
/etc/default/docker
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
Starten Sie den Docker-Dienst neu
sudo service docker restart
Löschen Sie alle Bilder, die die ungültigen DNS-Einstellungen zwischengespeichert haben.
Der Kredit geht an Andrew SB
quelle
docker build --no-cache=true ...
docker build --no-cache=true -t docker-whale .
aber nichts anderes scheint passiert zu sein.Ich habe das gleiche Problem, aber es hilft mir nicht, / etc / default / docker DNS- Einträge zu kommentieren oder die Datei /etc/resolv.conf im Build-Container oder /etc/docker/daemon.json zu bearbeiten .
Aber nachdem ich mit der Option --network = host erstellt habe, war die Auflösung wieder in Ordnung.
Vielleicht hilft das wieder jemandem.
quelle
Ich glaube, dass die Antwort von Matt Carrier die richtige Lösung für dieses Problem ist. Nach der Implementierung habe ich jedoch immer noch das gleiche Verhalten beobachtet :
could not resolve 'archive.ubuntu.com'
.Dies führte schließlich dazu, dass das Netzwerk, mit dem ich verbunden war, das öffentliche DNS blockierte. Die Lösung für dieses Problem bestand darin, meinen Docker-Container so zu konfigurieren, dass er denselben Nameserver verwendet, den mein Host (der Computer, auf dem ich Docker ausführte) verwendete.
Wie ich es versucht habe:
docker run -it docker/whalesay bash
ping 172.217.4.238
(Google.com)ping google.com
In meinem Fall führte der erste
ping
zu Antworten, der zweite nicht.Wie ich behoben habe:
Als ich feststellte, dass DNS im Container nicht funktioniert, habe ich überprüft, ob ich dasselbe Verhalten auf dem Host duplizieren kann.
nslookup google.com
gut auf dem Host gelöst. Abernslookup google.com 8.8.8.8
odernsloookup google.com 8.8.4.4
abgelaufen.Als nächstes fand ich die Nameserver, die mein Host beim Ausführen verwendete
nm-tool
(unter Ubuntu 14.04). Im Sinne eines schnellen Feedbacks habe ich das Beispielbild erneut gestartet und die IP-Adresse des Nameservers zur resolv.conf-Datei des Containers hinzugefügt :sudo vi /etc/resolv.conf
. Einmal gespeichert, habe ich den Ping erneut versucht (ping google.com
) und diesmal hat es funktioniert!Bitte beachten Sie, dass die an der resolv.conf des Containers vorgenommenen Änderungen nicht dauerhaft sind und bei Neustarts des Containers verloren gehen. In meinem Fall bestand die geeignetere Lösung darin, die IP-Adresse des Nameservers meines Netzwerks zur
/etc/default/docker
Datei des Hosts hinzuzufügen .quelle
nmcli device show <interfacename> | grep IP4.DNS
(Ubuntu> = 15) undnmcli dev list iface <interfacename> | grep IP4
(Ubuntu <15). Bildnachweis: Marty Fried .Nachdem ich der Standard-Docker-Datei eine lokale DNS-IP hinzugefügt hatte, funktionierte sie für mich. Bitte finden Sie die folgenden Schritte ...
Jetzt mach weiter und baue den Docker ... :)
quelle
Für alle, die dieses Problem ebenfalls haben, habe ich mein Problem durch Bearbeiten der
/etc/default/docker
Datei gelöst , wie in anderen Antworten und Fragen vorgeschlagen. Ich hatte jedoch keine Ahnung, welche IP als DNS verwendet werden sollte.Erst nach einer Weile stellte ich fest, dass ich
ifconfig docker
auf dem Host ausgeführt werden musste, um die IP für die Docker-Netzwerkschnittstelle anzuzeigen.Es war
172.17.0.1
in meinem Fall. Hoffe, das hilft jedem, der auch dieses Problem hat.quelle
ifconfig docker0
Ich habe diese Antwort nach einigem Googleing gefunden. Ich verwende Windows, daher galten einige der oben genannten Antworten nicht für mein Dateisystem.
Grundsätzlich laufen:
Was den vorhandenen Nameserver, der mit verwendet wird, einfach überschreibt,
8.8.8.8
glaube ich. Es hat bei mir funktioniert!Aufgrund einiger Kommentare müssen Sie möglicherweise root sein. Um dies zu tun, geben Sie aus
sudo -i
.quelle
ssh
es nicht existiert?sudo -i
wenn Sie in sindIch wollte nur eine späte Antwort für alle hinzufügen, die auf dieses Problem von Suchmaschinen stoßen.
Tun Sie dies NICHT: Früher hatte ich eine Option in / etc / default / docker zum Festlegen
iptables=false
. Dies lag daran, dass ufw nicht funktionierte (alles wurde geöffnet, obwohl nur 3 Ports erlaubt waren), also folgte ich blind der Antwort auf diese Frage: Uncomplicated Firewall (UFW) blockiert nichts, wenn Docker verwendet wird, und dies wurde in der verknüpft BemerkungenIch habe ein sehr geringes Verständnis der iptables-Regeln / nat / routing im Allgemeinen, weshalb ich möglicherweise etwas Irrationales getan habe.
Es stellt sich heraus, dass ich es wahrscheinlich falsch konfiguriert und die DNS-Auflösung in meinen Containern beendet habe. Als ich ein interaktives Containerterminal betrieb:
docker run -i -t ubuntu:14.04 /bin/bash
Ich hatte diese Ergebnisse:
Durch das Zurücksetzen meiner gesamten ufw-Konfiguration (before.rules), das Deaktivieren von ufw und das Entfernen von iptables = false aus / etc / default / docker wurde die DNS-Auflösungsfunktionalität der Container wiederhergestellt.
Ich freue mich jetzt darauf, die ufw-Funktionalität wieder zu aktivieren, indem ich stattdessen diese Anweisungen befolge .
quelle
Ich habe das gleiche Problem und habe die genannten Schritte ausprobiert, aber anscheinend funktioniert keines, bis die Netzwerkeinstellungen aktualisiert wurden.
Die Schritte:
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ip-masq=true"
zu/etc/default/docker
.iptables -t nat -F POSTROUTING
. Starten Sie Docker anschließend neu und die nat-Tabelle wird mit dem neuen IP-Bereich initialisiert.quelle
Gleiches Problem für mich (unter Ubuntu Xenial).
docker run --dns ...
für Container gearbeitet.docker build
(Docker-Compose usw.) funktionierte nicht.Nach der Analyse der Docker-Protokolle (
journalctl -u docker.service
) wurde eine Warnung bezüglich einer fehlerhaften resolvconf angewendet.Anschließend stellte ich fest, dass unsere Firmennamenserver zu den Netzwerkschnittstellen hinzugefügt wurden, jedoch nicht in resolvconf.
Diese Lösung angewendet Wie konfiguriere ich mein statisches DNS in Schnittstellen? (askubuntu) , dh Hinzufügen von Nameservern zu
/etc/resolvconf/resolv.conf.d/tail
Nach dem Aktualisieren von resolvconf (oder Neustart).
bash docker run --rm busybox nslookup google.com
arbeitete sofort.
Alle meine Docker-Compose-Builds funktionieren jetzt.
quelle
Ich habe heute das gleiche Problem, ich habe gerade die folgende Zeile zu / etc / default / docker hinzugefügt
und dann habe ich meinen Laptop neu gestartet.
In meinem Fall reicht es mir nicht aus, den Docker-Daemon neu zu starten. Ich muss meinen Laptop neu starten, damit er funktioniert.
quelle
Starten Sie Docker einfach neu und versuchen Sie es erneut, bevor Sie zu viel Zeit mit einer der anderen Lösungen verbringen .
Das Problem wurde für mich mit Docker Desktop für Windows unter Windows 10 behoben.
quelle
Ich habe jetzt auch einige Zeit damit zu kämpfen, aber hier ist es, was es für mich gelöst hat
Ubuntu 16.04 x64
. Ich hoffe, es spart auch jemandem Zeit.In
/etc/NetworkManager/NetworkManager.conf
: auskommentieren#dns=dnsmasq
Erstellen (oder ändern)
/etc/docker/daemon.json
:sudo service docker restart
quelle
Auf meinem System (
macOS High Sierra 10.13.6
mitDocker 2.1.0.1
) war dies auf einen Corporate Proxy zurückzuführen.Ich habe dies in zwei Schritten gelöst:
Preferences>Proxies
Fügen Sie Ihrer config.json die gleichen Einstellungen hinzu
~/.docker/config.json
wie:quelle