Docker überschreibt meine Datei /etc/resolv.conf in Containern

17

Ich möchte die /etc/resolv.conf meines Containers auf Folgendes setzen:

nameserver 208.67.222.222
nameserver 208.67.220.220

Mein Dockerfile hat die folgende Zeile:

ADD resolv.conf /etc/resolv.conf

Diese hinzugefügte Datei enthält die richtigen Nameserver.

Die Datei /etc/resolv.conf meines Docker-Hosts enthält die richtigen Informationen.

Ich lasse den Container wie folgt laufen:

docker run -itd --cap-add=NET_ADMIN --device /dev/net/tun \
-v /home/pi/share/ovpn:/ovpn \
--privileged --network=internet_disabled --name vpn-client \
--dns=208.67.222.222 \
openvpn-client_nat-gateway /bin/bash

Trotz alledem gibt der Container die folgende Ausgabe aus:

root@642b0f4716ba:/# cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0

Erst nachdem ich die resolv.conf manuell im Container (oder mit docker exec) geändert habe, sieht es richtig aus.

Ich möchte es lieber vermeiden, es mit einem exec-Befehl reparieren zu müssen. Hat jemand eine Idee, was hier los ist?

Duncan Marshall
quelle
1
Wenn Sie nicht einmal erwähnen, dass die Distribution im Container läuft, würde ich leicht annehmen, dass Sie die falsche Sache suchen / beschuldigen.
Julie Pelletier
@ JuliePelletier Fragen Sie mich, welche Distribution im Container ausgeführt wird?
Duncan Marshall
1
Ja!!! Welche Distribution läuft im Container? Basiert Ubuntu zufällig?
Julie Pelletier
Es ist Resin / RPI-Raspbian: Jessie, das auf Debian basiert, aber meines Wissens nicht auf Ubuntu.
Duncan Marshall
In ihrem Wiki sind einige Fälle beschrieben , die Ihre Situation erklären könnten.
Julie Pelletier

Antworten:

14

AFAIK, Docker überschreibt einige Dateien in einem Image, wenn es gestartet wird , auch wenn sie in Dockerfile hinzugefügt wurden. Dies schließt sicher auch ein /etc/hosts, und höchstwahrscheinlich passiert dasselbe /etc/resolv.confauch. Dies wird anscheinend verwendet, um das standardmäßige "interne" Netzwerk von Docker korrekt aufzubauen (so dass sich die Bilder sehen, aber nicht hosten usw.). Wenn Sie wirklich sicher sind, dass Sie einige dieser Dateien überschreiben / ändern möchten, müssen Sie dies meines Erachtens tun Tun Sie dies als Teil der Laufzeitaktionen, dh als Teil der CMDZeile. Beispielsweise:

...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
        your_old_commands...
akavel
quelle
3
Das ist richtig. /etc/resolv.confwird beim Starten eines Containers vom Host kopiert.
wisbucky
4

Wie ich sehe, verwenden Sie user-defined networksund Docker Engine Version> = 1.10. Also aus der offiziellen Docker-Engine-Dokumentation über Embedded DNS server in user-defined networks:

Diese --dns-IP-Adressen werden vom eingebetteten DNS-Server verwaltet und nicht in der Datei /etc/resolv.conf des Containers aktualisiert.

Ihr DNS muss funktionieren, aber Sie werden in keiner Konfigurationsdatei sehen.

Referenzen .

Thiago Almeida
quelle
0

Ich habe das Problem behoben, wenn es sich um die Webanwendung für Container in Azure handelt.

Es sind 2 Container gepaart . Kudu und der Gastgeber

Schritte

1.Installieren Sie das ssh aus Ihrer Docker-Datei (enthalten Sie auch eine sshd-Konfiguration)

2.Erstelle eine containerstart.sh (welche die resolv.conf aktualisiert)

3.Setzen Sie den Einstiegspunkt dort hinein

Jetzt wird der Host resolv.conf aktualisiert und Sie können alle gewünschten DNS verwenden

PS: Wenn Sie die benutzerdefinierte DNS im Netzwerk nicht abholen können, machen Sie sich keine Sorgen. Wir konnten es auch nicht. Möglicherweise muss ein Neustart durchgeführt werden, wenn Sie eine ASE-Umgebung verwenden

Rıfat Erdem Sahin
quelle