Ich habe ein Problem beim Erstellen von Docker-Images in meinem Unternehmensnetzwerk. Ich fange gerade erst mit Docker an, daher habe ich die folgende Docker-Datei für eine App vom Typ "Hallo Welt":
# DOCKER-VERSION 0.3.4
FROM centos:6.4
# Enable EPEL for Node.js
RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# Install Node.js and npm
RUN yum install -y npm
# Bundle app source
ADD . /src
# Install app dependencies
RUN cd /src; npm install
EXPOSE 8080
CMD ["node", "/src/index.js"]
Dies funktioniert gut, wenn ich es zu Hause auf meinem Laptop in meinem eigenen drahtlosen Netzwerk baue. Es entfernt die erforderlichen Abhängigkeiten und erstellt das Image korrekt.
Wenn ich jedoch in meinem Unternehmensnetzwerk arbeite, schlägt derselbe Docker-Build fehl, wenn versucht wird, das RPM von download.fedoraproject.org mit der folgenden Fehlermeldung abzurufen:
Schritt 2: RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm ---> Laufen in e0c26afe9ed5 curl: (5) Couldn ' t Beheben des Proxy-Fehlers 'some.proxy.address': Überspringen von http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm - Übertragung fehlgeschlagen
In meinem Unternehmensnetzwerk kann ich von meinem Laptop aus problemlos auf diese URL zugreifen. Aber sobald Docker versucht, den Container zu erstellen, kann er plötzlich überhaupt nicht mehr aufgelöst werden. Dieses Verhalten ist für eine Vielzahl externer Ressourcen (apt-get usw.) gleich: Sie können alle auf meinem Laptop im Unternehmensnetzwerk problemlos aufgelöst werden, Docker kann sie jedoch nicht auflösen.
Ich habe nicht das Netzwerk-Know-how, um herauszufinden, was hier los ist. Weiß jemand, warum dieses seltsame Verhalten beim Erstellen von Docker-Containern auftreten würde?
apt-get update
.Antworten:
Ich konnte das Problem herausfinden. Unter Ubuntu setzt Docker die DNS-Server für den Container auf die Server von Google unter 8.8.8.x. Soweit ich weiß, ist dies eine Problemumgehung für Ubuntu, da Ubuntu /etc/resolv.conf auf 127.0.0.1 setzt.
Diese Google-Server waren hinter unserer Firewall nicht zugänglich, weshalb wir keine URLs auflösen konnten.
Das Update besteht darin, Docker mitzuteilen, welche DNS-Server verwendet werden sollen. Dieser Fix 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:
Sie können dieser Konfiguration so viele DNS-Server hinzufügen, wie Sie möchten. Sobald Sie diese Datei bearbeitet haben, möchten Sie Ihren Docker-Dienst neu starten:
Binärdateien
Wenn Sie Docker über die Binärmethode (dh kein Paket) installiert haben, legen Sie die DNS-Server beim Starten des Docker-Dämons fest:
quelle
--dns
Option auszuführen oder die Konfiguration einzufügen/etc/default/docker
Ich empfehle, die DNS-Einstellungen des Docker-Daemons zu ändern. Sie können die Standardoptionen für den Docker-Dämon festlegen, indem Sie eine Dämon-Konfigurationsdatei unter /etc/docker/daemon.json erstellen . Stellen Sie den DNS-Server entsprechend Ihrem Host-Computer ein, z. B. ist mein DNS-Server 10.0.0.2:
Dann müssen Sie nur noch den Docker-Dienst neu starten:
Eine schrittweise Erklärung finden Sie hier. Korrigieren Sie die Netzwerk-DNS-Konfiguration von Docker
quelle
Die folgenden Schritte funktionieren für mich (sowohl für den Docker-Build- als auch für den Docker-Run-Befehl). Meine Linux-Version ist Ubuntu 14.04.
Dieses Ergebnis DNS: 192.168.1.1 in meinem Fall
quelle
/etc/sysconfig/docker
Datei, zu der ich dieDOCKER_OPTS="--dns 8.8.8.8"
Zeile hinzufügen und mein Problem lösen konnte.Für jede Linux-Distribution, die mit SystemD arbeitet (Ubuntu 16, RHEL 7 ...), wird der Pfad mit dem folgenden Befehl angezeigt:
Der Weg wäre
/lib/systemd/system/docker.service
. Fügen Sie dieDOCKER_OPTS
Werte, die einen der folgenden Werte haben können--dns
, in die Zeile ein, in der der Dämon gestartet wird.quelle
docker.service
ich den Docker-Service mitsudo service docker stop
und dannsystemctl daemon-reload
und schließlichsudo service docker start
/etc/systemd/system/docker.service.d
mit der geänderten Konfiguration hinzuzufügen (die systemd die Systemkonfiguration hilfreich zusammenführt / überschreibt), als die Systemversion zu ändern. Letzteres geht bei Upgrades verloren.Mit Docker (mindestens> = 1.13, wahrscheinlich früher) unter Mac und Windows können Sie das DNS unter Einstellungen -> Daemon -> Erweitert konfigurieren:
In der folgenden Konfiguration werden zwei Unternehmens-DNS-Server (verwenden Sie hier Ihre eigenen Werte) mit Fallback auf öffentliche DNS-Server von Google festgelegt.
quelle
Geben Sie Ihren DNS für den Docker-Daemon an.
Holen Sie sich zunächst Ihre DNS-Adresse
Testen Sie, ob das Problem tatsächlich mit dem DNS zusammenhängt, indem Sie einen Docker-Container starten, der dieses neue DNS erzwingt
Wenn das Problem dadurch behoben wird, können Sie dieses Update auf folgende Weise für alle Docker-Daemons anwenden
Bearbeiten oder erstellen Sie eine Datei /etc/docker/daemon.json
Fügen Sie dieser Datei die folgende Zeile hinzu
Starten Sie Docker neu
Eine sehr schöne Anleitung für ALLE diese Prozesse finden Sie hier.
https://development.robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
quelle
daemon.json
wird am/var/snap/docker/<id>/config/daemon.json
Lösung ohne Neustart des Docker-Dienstes
Es ist möglich, die DNS-Einstellungen für ein einzelnes Docker-Image zu ändern, ohne andere
docker build
Aufrufe zu beeinflussen (und ohne den Docker-Dienst neu zu starten), indem Sie zumresolv.conf
Zeitpunkt der Erstellung Folgendes überschreiben :Ersetzen Sie die IP
123.123.123.123
durch die IP-Adresse, die in Ihrem Unternehmensnetzwerk verwendet wird (verwenden Sienmcli dev show | grep 'IP4.DNS'
diese Option, um den aktuell verwendeten DNS-Server abzurufen).Nachteile:
quelle
Auf meinem Ubuntu 16.04-Computer funktioniert Googles DNS manchmal nicht zum Erstellen von Docker-Images.
Ich muss das DNS meines Dienstanbieters mit dem folgenden Befehl manuell ermitteln
und füge es meiner
daemon.json
wie unten gezeigt hinzu(PS nm-Tool ist ab Ubuntu 15.04 veraltet)
quelle