Docker-Container können DNS auf dem Ubuntu 14.04-Desktop-Host nicht auflösen

Ich habe ein Problem mit meinen Docker-Containern unter Ubuntu 14.04 LTS.Docker funktionierte zwei Tage lang einwandfrei, und dann verlor ich plötzlich die gesamte Netzwerkverbindung in meinen Containern. Die folgende Fehlerausgabe ließ mich zunächst glauben, dass apt-get versucht, das DNS über IPv6 aufzulösen.

Ich habe IPv6 auf meinem Host-Computer deaktiviert und trotzdem alle Bilder entfernt, Basis-Ubuntu abgerufen und bin immer noch auf das Problem gestoßen.

Ich habe meine / etc / resolve geändert.conf Nameserver von meinem lokalen DNS-Server zu den öffentlichen DNS-Servern von Google (8.8.8.8 und 8.8.4.4) und habe immer noch kein Glück. Ich habe auch das DNS in den DOCKER_OPTS von / etc / default / docker auf Google gesetzt und Docker neu gestartet.

Ich habe auch versucht, Coreos zu ziehen, und yum konnte auch DNS nicht auflösen.

Es ist komisch, denn obwohl DNS nicht funktioniert, erhalte ich immer noch eine Antwort, wenn ich dieselben Update-Server anpinge, die apt-get nicht auflösen kann.

Ich bin nicht hinter einem Proxy, ich bin in einem sehr normalen lokalen Netzwerk und diese Version von Ubuntu ist auf dem neuesten Stand und frisch (ich habe sie vor zwei Tagen installiert, um näher an Docker zu sein).

Ich habe dies in anderen Beiträgen zu Stackoverflow- und Github-Problemen gründlich recherchiert, aber keine Lösung gefunden. Ich habe keine Ideen mehr, wie ich dieses Problem lösen kann, kann mir jemand helfen?

Fehlermeldung

➜  arthouse git:(docker) ✗ docker build --no-cache .Sending build context to Docker daemon 51.03 MBSending build context to Docker daemon Step 0 : FROM ubuntu:14.04 ---> 5506de2b643bStep 1 : RUN apt-get update ---> Running in 845ae6abd1e0Err http://archive.ubuntu.com trusty InReleaseErr http://archive.ubuntu.com trusty-updates InReleaseErr http://archive.ubuntu.com trusty-security InRelease   Err http://archive.ubuntu.com trusty-proposed InRelease  Err http://archive.ubuntu.com trusty Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]Err http://archive.ubuntu.com trusty-updates Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]Err http://archive.ubuntu.com trusty-security Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]Err http://archive.ubuntu.com trusty-proposed Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]Reading package lists...W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease  W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InRelease  W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/InRelease  W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-proposed/InRelease  W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-proposed/Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]W: Some index files failed to download. They have been ignored, or old ones used instead.

Container IFCONFIG/PING

➜  code  docker run -it ubuntu /bin/bashroot@7bc182bf87bb:/# ifconfigeth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:04            inet addr:172.17.0.4  Bcast:0.0.0.0  Mask:255.255.0.0          inet6 addr: fe80::42:acff:fe11:4/64 Scope:Link          UP BROADCAST RUNNING  MTU:1500  Metric:1          RX packets:7 errors:0 dropped:0 overruns:0 frame:0          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000           RX bytes:738 (738.0 B)  TX bytes:648 (648.0 B)lo        Link encap:Local Loopback            inet addr:127.0.0.1  Mask:255.0.0.0          inet6 addr: ::1/128 Scope:Host          UP LOOPBACK RUNNING  MTU:65536  Metric:1          RX packets:0 errors:0 dropped:0 overruns:0 frame:0          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)root@7bc182bf87bb:/# ping google.comPING google.com (74.125.226.0) 56(84) bytes of data.64 bytes from lga15s42-in-f0.1e100.net (74.125.226.0): icmp_seq=1 ttl=56 time=12.3 ms--- google.com ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 12.367/12.367/12.367/0.000 msroot@7bc182bf87bb:/# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=44 time=21.8 ms64 bytes from 8.8.8.8: icmp_seq=2 ttl=44 time=21.7 ms64 bytes from 8.8.8.8: icmp_seq=3 ttl=44 time=21.7 ms

Außerdem schlägt das apt-get-Update fehl, wenn ich IPv4 erzwinge:

root@6d925cdf84ad:/# sudo apt-get update -o Acquire::ForceIPv4=trueErr http://archive.ubuntu.com trusty InReleaseErr http://archive.ubuntu.com trusty-updates InReleaseErr http://archive.ubuntu.com trusty-security InReleaseErr http://archive.ubuntu.com trusty-proposed InReleaseErr http://archive.ubuntu.com trusty Release.gpg  Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]Err http://archive.ubuntu.com trusty-updates Release.gpg  Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]Err http://archive.ubuntu.com trusty-security Release.gpg  Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]Err http://archive.ubuntu.com trusty-proposed Release.gpg  Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]Reading package lists... DoneW: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease  

Woo, ich habe auf Github einen Beitrag gefunden, der mein Problem gelöst hat.

Nachdem Steve K. darauf hingewiesen hatte, dass es sich eigentlich nicht um ein DNS-Problem und ein Verbindungsproblem handelte, konnte ich Folgendes finden ein Beitrag auf github das beschrieb, wie man dieses Problem behebt.

Anscheinend wurde die Docker0-Netzwerkbrücke aufgehängt. Durch die Installation von bridge-Utils und das Ausführen von Folgendem wurde mein Docker funktionsfähig:

apt-get install bridge-utilspkill dockeriptables -t nat -Fifconfig docker0 downbrctl delbr docker0service docker restart

In dem Versuch, einem Problem, das ich auch erlebt habe, einen Mehrwert zu verleihen. mit einer alternativen Antwort:

Mein Netzwerk war bürobezogen und die Google DNS-Einstellungen wurden blockiert, sodass der Container IP-Adressen, aber keine Domänennamen anpingen konnte.

Mein Gastgeber /etc/resolv.conf ursprünglich sah es so aus;

#Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)#DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTENnameserver 127.0.1.1search companyDomain.co.za

Dies liegt daran, dass der Netzwerkmanager eine Art Maskierung der DNS-Serverdetails vornimmt.

Leider nach dem docker-Handbücher docker filtert alle Localhost-IP-Adressen heraus, wenn die Auflösung des Containers erstellt wird.conf und ersetzen Sie sie durch die DNS-IPs von Google. Was in meinem Fall dazu führte, dass Domainnamen tabu waren.

Ich musste:

  • Mein zurücksetzen /etc/default/docker standardmäßig verwenden Container die Auflösung meines Hosts.conf Inhalt stattdessen.
  • Bearbeiten /etc/NetworkManager/NetworManager.conf und kommentiere die Zeile dns=dnsmasq. Auf diese Weise können Sie die tatsächlichen DNS-IP-Adressen anstelle von 127.0.0.1 angeben.
  • Starten Sie NM neu mit sudo service network-manager restart.
  • Starten Sie den Docker-Dienst neu mit sudo service docker restart.

Das Ausführen eines Containers würde es dann ermöglichen apt-get update/upgrade, beispielsweise.

Docker offizielles Dokument bietet Instrumente zum Konfigurieren eines DNS-Servers für die Verwendung durch Docker

  1. Öffnen Sie die /etc/default/docker datei zum Bearbeiten:

    sudo nano /etc/default/docker
  2. Fügen Sie eine Einstellung für Docker hinzu:

    DOCKER_OPTS="--dns 8.8.8.8"
  3. Ersetzen 8.8.8.8 mit einem lokalen DNS-Server wie 192.168.1.1. Sie können auch mehrere DNS-Server angeben. Trennte sie zum Beispiel durch Leerzeichen:

    --dns 8.8.8.8 --dns 192.168.1.1

    Warnung: Wenn Sie dies auf einem Laptop tun, der eine Verbindung zu verschiedenen Netzwerken herstellt, stellen Sie sicher, dass Sie einen öffentlichen DNS-Server auswählen.

    PS: nm-tool kann verwendet werden, um den lokalen Host-DNS-Server zu überprüfen

  4. Speichern und schließen Sie die Datei.

  5. Starten Sie den Docker-Daemon neu.

    sudo service docker restart

Dein Fehler ist hier:

 Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]

Dies ist kein DNS-Fehler, stattdessen versucht Ihr System, eine Verbindung zu IPv6-Hosts herzustellen, und schlägt fehl. Vermutlich, weil Sie auf Ihrem Host keinen IPv6-Zugriff haben. Die eigentliche Suche nach der IPv6-Adresse ist erfolgreich. (Der Ubuntu-Spiegel / das Ubuntu-Archiv ist sowohl über IPv6 als auch über IPv4 verfügbar. Sie hatten einfach das Pech, ein IPv6 zu treffen, weil Ihr System glaubt, dass es funktionieren sollte.)

Sie sollten entweder das beheben, indem Sie miredo installieren, oder versuchen Sie es erneut, bis Sie einen IPv4-Spiegel erreichen.

Auch hier ist es wichtig zu erkennen, dass DNS nicht schuld ist, wie Sie anhand Ihrer eigenen Ping-Tests sehen können.

Für andere Leser, die hierher kommen, während sie boot2docker verwenden, habe ich Folgendes behoben. Tatsächlich wies mich die obige Antwort in die richtige Richtung.

Grundsätzlich konnten Container in boot2docker aus irgendeinem Grund Hostnamen nicht auflösen.

Also habe ich einfach boot2docker neu gestartet und die Container gestartet. Jetzt können Hostnamen wieder ordnungsgemäß aufgelöst werden.

Ich nehme an, das Problem bestand darin, boot2docker zu starten, während das Netzwerk auf dem Host verbunden war, wodurch boot2docker gestartet wurde und in einen nicht funktionierenden Zustand überging.

Ich bin auf dieses Problem gestoßen, als ich dem Ubuntu-Installationsprogramm erlaubte, das Docker-Snap-Paket zu installieren. Als ich das fallen ließ und zum offiziellen Docker-Paket wechselte, löste sich das Problem von selbst.

sudo snap remove dockercurl -fsSL https://get.docker.com -o get-docker.shsh get-docker.sh

Öffnen Sie die Datei /lib/systemd/system/docker.service

In ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sockhinzufügen
--dns 8.8.8.8

Wie diese:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --dns 8.8.8.8

Starten Sie den Docker-Dienst neu

Ich hatte das gleiche Problem unter Windows. Dieser Befehl hat es für mich zum Laufen gebracht: docker-machine restart

Hatte ein ähnliches Problem, aber auch die Namensauflösung zwischen Containern in einem benutzerdefinierten Netzwerk schien etwas flockig zu sein. Manche konnten so etwas nicht lösen wie du.

Das Problem war ein verschobener / var / lib / docker. Aus Platzgründen wurde es über nfs gemountet. Das Hinzufügen eines lokalen Dateisystems und das Verschieben der Dateien dorthin behebt das Problem.

Bei mir hat es nach einem Neustart funktioniert.