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?
Antworten:
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.conf
auch. 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 derCMD
Zeile. Beispielsweise:quelle
/etc/resolv.conf
wird beim Starten eines Containers vom Host kopiert.Wie ich sehe, verwenden Sie
user-defined networks
und Docker Engine Version> = 1.10. Also aus der offiziellen Docker-Engine-Dokumentation überEmbedded DNS server in user-defined networks
:Ihr DNS muss funktionieren, aber Sie werden in keiner Konfigurationsdatei sehen.
Referenzen .
quelle
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
quelle