2017-11-14 4 views
0

Bei der Ausführung von Containern beim Start bemerkte ich, dass einige resolv.conf verwendeten, bevor systemd-resolved es von der Standardeinstellung mit DHCP aktualisiert hatte. Dies führte dazu, dass Container, die zu früh nach dem Start gestartet wurden, nichts auflösen konnten und neu gestartet werden mussten, um die richtigen DNS-Einstellungen zu verwenden. Dies geschieht aus verschiedenen Gründen sowohl für rkt als auch für Docker; Docker's Methode zum Aktualisieren von resolv.conf in Containern ist not compatible with the overlay filesystem driver und da systemd-resolved die Datei nicht direkt aktualisiert (sondern nur temporär erstellt und umbenannt wird), aktualisiert rkts Bind-Mounting nicht, was der Container sieht.Wie kann ich ein Resolv.conf in meinen Containern neu laden?

Derzeit verwende ich eine Hacky systemd.unit, um das Netzwerk-Online-Ziel zu verzögern, von dem docker.service und meine rkt-Pods abhängen.

[Unit] 
Description=Wait for DNS 

[Service] 
Type=oneshot 
RemainAfterExit=true 
ExecStart=/bin/sh -c 'while ! getent ahosts google.com >dev/null; do sleep 1; done' 

[Install] 
WantedBy=network-online.target 

Aber diese verzögert deutlich meine Anlaufzeit

# systemd-analyze blame 
     18.068s wait-for-dns.service 
     ... 

und wenn resolv.conf ändert sich wieder wird es nicht helfen. Also habe ich mich gefragt, ob es eine elegantere Lösung für mein Problem gibt. Idealerweise möchte ich in der Lage sein, eine resolv.conf-Aktualisierung sowohl in rkt- als auch in Docker-Containern bei jeder Änderung auszulösen.

Antwort

0

Lassen Sie Container auf user defined network laufen, damit sie die embedded DNS server verwenden, die Nachschlagevorgänge an den DNS des Systems weiterleitet.

Die Standard-Bridge docker0 enthält einige spezielle Regeln, die für die Legacy-Unterstützung beibehalten wurden. Die Verwendung eines mounted /etc/resolv.conf ist eines dieser Legacy-Dinge.

Wenn rkt nicht den gleichen DNS-Typ unterstützt, könnte die allgemeine Lösung darin bestehen, einen DNS-Server wie Unbound als local forwarding resolver einzurichten. Container verfügen dann über einen statischen DNS-Server, auf den verwiesen wird.

+0

Danke, ich benutze 'docker0' nicht, die, mit denen ich Probleme hatte, verwenden' --net = host', also könnte ich einen lokalen DNS-Server ausführen oder Container nur statisch auf meinen DNS-Server zeigen in meiner Domäne – dippynark

Verwandte Themen