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.
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