it-swarm.com.de

Das Docker-Update "apt-get" schlägt fehl

Kann mir jemand helfen, apt-get in meinem Docker-Container zum Laufen zu bekommen? Wenn ich versuche, einen apt-get-Befehl in meinem Docker-Container auszuführen, schlägt der Befehl fehl. Ich verwende Docker Version 1.1.1, Build bd609d2 auf Ubuntu 12.04.

Wenn ich tue

$ Sudo docker run -i -t ubuntu:14.04 /bin/bash
# apt-get update

Ich bekomme Fehler, wenn ich sage

Konnte "archive.ubuntu.com" nicht auflösen

Ich habe versucht, die folgende Zeile in/etc/default/docker zu kommentieren

DOCKER_OPTS = "- DNS 8.8.8.8 - DNS 8.8.4.4"

ich kann jedoch immer noch kein Ping an google.com

ping: unbekannter Host 

Ich habe bestätigt, dass der Container die DNS-Server 8.8.8.8 und 8.8.4.4 verwendet

root @ 0baa87fc6322:/# cat /etc/resolv.conf

nameserver 8.8.8.8

nameserver 8.8.4.4

und ich bin in der Lage, beide Server anzupingen, also bin ich ziemlich sicher, dass eine Firewall nicht nur meine Pakete verwirft.

Jede Hilfe dazu wäre dankbar!

Vielen Dank!

27
jbadua

Danke für deine Hilfe! Ich fand heraus, dass es ein DNS-Problem war und dass es wegen einer Firewall war. Nach einiger Suche fand ich diese Frage, die ich bei der Suche nach 'docker apt-get fail' nicht finden konnte.

Docker - Netzwerkanrufe schlagen während Image-Erstellung im Unternehmensnetzwerk fehl.

Sein Problem war ähnlich wie bei mir, und die Lösung half mir dabei, dass es funktioniert. Ich habe seine Lösung für jeden kopiert, der diese Frage in der Zukunft findet.

Auf diese Google-Server konnte nicht hinter unserer Firewall zugegriffen werden. Aus diesem Grund konnten wir keine URLs auflösen.

Die Lösung besteht darin, Docker mitzuteilen, welche DNS-Server verwendet werden sollen. Dieses Update hängt davon ab, wie Sie Docker installiert haben: Ubuntu-Paket

Wenn Sie das Ubuntu-Paket installiert haben, bearbeiten Sie/etc/default/docker und fügen Sie die folgende Zeile hinzu:

DOCKER_OPTS = "- dns <Ihr_dns_server_1> --dns <Ihr_dns_server_2>"

Sie können beliebig viele DNS-Server zu dieser Konfiguration hinzufügen. Nachdem Sie diese Datei bearbeitet haben, möchten Sie Ihren Docker-Dienst neu starten:

Sudo Service Docker-Neustart

Binaries

Wenn Sie Docker über die Binärmethode installiert haben (d. H. Kein Paket), legen Sie die DNS-Server fest, wenn Sie den Docker-Dämon starten:

Sudo Docker -d -D --dns --dns &

26
jbadua

Wenn Sie einen Fehler wie Could not resolve ... sehen, handelt es sich wahrscheinlich um eine DNS-Konfiguration.

Als erstes sollten Sie cat /etc/resolv.conf im docker-Container ausführen. Wenn es über einen ungültigen DNS-Server verfügt, beispielsweise nameserver 127.0.x.x, kann der Container die Domänennamen nicht in IP-Adressen auflösen, sodass ping google.com fehlschlägt.

Die zweite zu überprüfende Sache ist cat /etc/resolv.conf auf dem Host-Rechner. Docker kopiert grundsätzlich den /etc/resolv.conf des Hosts in den Container, wenn ein Container gestartet wird. Wenn also /etc/resolv.conf des Hosts falsch ist, gilt dies auch für den Docker-Container.

Wenn Sie festgestellt haben, dass der /etc/resolv.conf des Hosts falsch ist, haben Sie zwei Möglichkeiten:

  1. Festcodieren Sie den DNS-Server in daemon.json. Dies ist einfach, aber nicht ideal, wenn Sie erwarten, dass sich der DNS-Server ändert.

  2. Korrigieren Sie den /etc/resolv.conf der Hosts. Dies ist etwas komplizierter, aber es wird dynamisch generiert, und Sie kodieren den DNS-Server nicht.


1. Hardcode-DNS-Server in docker daemon.json

  • /etc/docker/daemon.json bearbeiten

    {
        "dns": ["10.1.2.3", "8.8.8.8"]
    }
    
  • Starten Sie den Docker-Daemon neu, damit diese Änderungen wirksam werden:
    Sudo systemctl restart docker

  • Wenn Sie jetzt einen Container ausführen/starten, füllt das Docker /etc/resolv.conf mit den Werten von daemon.json.


2. /etc/resolv.conf der Hosts korrigieren

A. Ubuntu 16.04 und früher

  • Für Ubuntu 16.04 und frühere Versionen wurde /etc/resolv.conf von NetworkManager dynamisch generiert. 

  • Kommentieren Sie die Zeile dns=dnsmasq (mit einem #) in /etc/NetworkManager/NetworkManager.conf aus.

  • Starten Sie den NetworkManager neu, um /etc/resolv.conf zu regenerieren:
    Sudo systemctl restart network-manager

  • Überprüfen Sie auf dem Host: cat /etc/resolv.conf

B. Ubuntu 18.04 und später

  • Ubuntu 18.04 wurde geändert, um systemd-resolved ZU VERWENDEN, UM /etc/resolv.conf zu generieren. Jetzt verwendet es standardmäßig einen lokalen DNS-Cache (127.0.0.53). Dies funktioniert nicht in einem Container. Daher verwendet Docker standardmäßig den 8.8.8.8-DNS-Server von Google, der für Benutzer hinter einer Firewall möglicherweise beschädigt wird.

  • /etc/resolv.conf ist eigentlich ein Symlink (ls -l /etc/resolv.conf), der standardmäßig in Ubuntu 18.04 auf /run/systemd/resolve/stub-resolv.conf (127.0.0.53) verweist.

  • Ändern Sie einfach den Symlink, um auf /run/systemd/resolve/resolv.conf zu verweisen, der die echten DNS-Server auflistet:
    Sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

  • Überprüfen Sie auf dem Host: cat /etc/resolv.conf

Jetzt sollte auf dem Host ein gültiger /etc/resolv.conf vorhanden sein, damit das Andockfenster in die Container kopiert werden kann.

8
wisbucky

Überprüfen Sie zuerst, ob Sie eine Verbindung haben, und pingen Sie direkt an ip 91.189.92.201, dass archive.ubuntu.com auf Folgendes verweist:

ping 91.189.92.201

Wenn Sie den Host immer noch nicht erreichen können, ist dies kein DNS-Problem.

Auch wenn Sie eine Internetverbindung haben, können Sie einen Hack machen. Fügen Sie einfach eine Zeile in die /etc/hosts-Datei ein und das Problem wurde behoben:

91.189.92.201 archive.ubuntu.com

4
Justas Pukys

Ich stoße auf das Problem in zwei verschiedenen Fällen und die Auflösung war anders ...

Erster mit Win7 + virtualbox (Xubuntu 16.04)} .__ Dieser Kommentar hat die Aufgabe erfüllt: https://stackoverflow.com/a/29659783/2260796

Ich ändere die Datei/etc/default/docker:

DOCKER-OPTS = "- ip-masq = true --dns mein_ip_dns_win --dns 8.8.8.8 - dns 8.8.4.4" Und Renn Sudo Service Docker-Neustart

Zweite auf einem Xubuntu-Betriebssystem (ubuntu 16.04) Die vorhergehende Lösung war nicht genug . Dieser Kommentar erledigte die Aufgabe: https://github.com/docker/docker/issues/1809 Ich musste eine Zeile in der Datei /etc/NetworkManager/NetworkManager.conf kommentieren: 

dns = dnsmasq

Dann renne

Starten Sie den Netzwerk-Manager neu

2
Garag

Ich verwende die Version von Mint und habe nach der Installation von Docker versucht, ein Abbild von Ubuntu zu erstellen, damit der Befehl apt-get update nicht erkannt wird. Um das Problem zu beheben, habe ich den Schritt zurückgesetzt

docker run -it -p 8080:80  ubuntu /bin/bash
echo "91.189.92.201 archive.ubuntu.com" >> /etc/hosts
cat /etc/hosts
apt-get update
1
cristofersousa

Error with docker-compose Ich hatte das gleiche Problem mit docker-compose. Ich löse das durch Hinzufügen von ENV http_proxy 'proxy.com' Eintrag in Dockerfile.

0
Lasith Niroshan