Ich habe eine CoreOS-Instanz, die einen Docker-Container ausgeführt, der dnsmasq
ausgeführt wird. Derzeit die dnsmasq
Konfiguration nur gesetzt, um alle Abfragen zu protokollieren und im Debug-Modus zu laufen, so sollte es nur das Zwischenspeichern tun.Odd Verhalten von Dnsmasq über Docker Container
Wenn ich versuche, dies mit aus einem anderen Behälter zu verwenden, nslookup
oder einfach ping google.com
läuft ich wieder Bad hostname: google.com
und ich kann in der Log-Abfrage sehen, die Anfragen werden in mehrfach kommen, als wenn erneut versucht wird.
Wenn ich versuche, die gleichen Befehle vom Host-Rechner mit CoreOS auszuführen, löst alles kein Problem im einzelnen Versuch.
Mein Plan ist es, die dnsmasq
auf jedem CoreOS-Rechner im Cluster laufen zu lassen, und es von confd
gesichert, so dass alle Dienste entsprechende Gegenstücke auflösen können.
Ich benutze Alpine Linux für meine Basisbilder, aber ich habe versucht, diese Befehle in einem Ubuntu und einem Debian-Image mit dem gleichen Ergebnis auszuführen.
"so dass alle Dienste geeignete Gegenstücke auflösen können"; Beachten Sie, dass Sie mit docker 1.9 andere Container im selben Netzwerk über ihren Namen direkt auflösen können. (z. B. "ping anderen Container"). Docker 1.10 bietet dafür zusätzliche Verbesserungen und ermöglicht es Ihnen, "containerspezifische Aliase" und "netzwerkspezifische Aliase" für Container festzulegen. – thaJeztah
Ja, mir ist klar, dass es Teil des CoreOS-Clusters sein wird. Daher weiß ich nicht, wie Docker das über mehrere Hosts kommunizieren wird. Wir planen auch, CoreOS + Flannel auszuführen, so dass jeder Container eine routbare IP-Adresse erhält. Ich denke, dass dieser Mechanismus außerhalb von Docker liegt. –
Also, ich komme näher an die Antwort. Ich habe "nslookup" durch "strace" in einem der Container gelaufen und eine Zeile war besonders interessant - "Antwort von unerwarteter Quelle: 172.17.42.1 # 53, erwartet 10.137.64.102 # 53" Grundsätzlich ist die '10.' Adresse wird an den Container übergeben, da es "-dns" ist. Aber die Antworten kommen vom "docker" -Netzwerkadapter des Hosts, so dass er verworfen und erneut versucht wird. Wenn ich den Resolver als IP-Adresse für das interne Docker-Netzwerk einstelle, funktioniert es einwandfrei. –