Einrichten von Docker Dnsmasq

8

Ich versuche, einen dinner-dnsmasq-Container einzurichten, damit ich alle meine docker-Container nach den Domänennamen durchsuchen kann, anstatt fest codierte IPs zu haben (wenn sie sich auf demselben Host befinden). Dies behebt ein Problem mit der Tatsache, dass man kann die Datei / etc / hosts in docker Containern nicht ändern, und dies ermöglicht mir, alle meine Container auf einfache Weise zu aktualisieren, indem eine einzelne Datei geändert wird, auf die der dnsmasq-Container verweist.

Es sieht so aus, als hätte jemand die harte Arbeit für mich erledigt und einen dnsmasq Container erstellt. Leider "funktioniert" das nicht für mich. Ich habe ein Bash-Skript geschrieben, um den Container wie folgt zu starten:

%Vor%

Bevor ich das ausführte, habe ich das Verzeichnis dnsmasq.hosts erstellt und eine einzelne Datei namens hosts.txt mit folgendem Inhalt eingefügt:

%Vor%

Leider immer wenn ich versuche, diese Domain von innen zu pingen:

  • der Gastgeber
  • Der dnsmasq-Container
  • ein anderer Container auf demselben Host

Ich erhalte immer die ping: unknown host Fehlermeldung.

Ich habe versucht, den dnsmasq-Container ohne Daemon-Modus zu starten, damit ich seine Ausgabe debuggen konnte, die unter:

liegt %Vor%

Ich vermute, dass ich den Parameter -p nicht richtig beim Starten des Containers angegeben habe. Kann mir jemand sagen, was es für andere Docker-Container sein soll, nach dem DNS zu suchen, oder ob das, was ich versuche, tatsächlich unmöglich ist?

    
Programster 11.04.2014, 12:14
quelle

1 Antwort

9

Das Build-Skript für den dnserv-Dienst dockermasq muss geändert werden, um an die öffentliche IP-Adresse des Servers zu binden, in diesem Fall 192.168.1.12 auf meiner eth0-Schnittstelle

%Vor%

Auf dem Host (in diesem Fall Ubuntu 12) müssen Sie die Datei resolv.conf oder / etc / network / interfaces aktualisieren, damit Sie Ihre öffentliche IP (eth0 oder eth1 device) als Nameserver registriert haben.

Sie können einen sekundären Nameserver für google festlegen, wenn der Container nicht ausgeführt wird, indem Sie die Zeile in dns-nameservers xxx.xxx.xxx.xxx 8.8.8.8 Eg. ändern. Es gibt kein Komma oder eine andere Zeile.

Sie müssen dann Ihren Netzwerkdienst sudo /etc/init.d/networking restart neu starten, wenn Sie die Datei / etc / network / interfaces aktualisiert haben, damit die Datei /etc/resolve.conf automatisch aktualisiert wird, die von docker während des Builds in den Container kopiert wird / p>

Starten Sie jetzt alle Ihre Container neu

  • sudo docker stop $CONTAINER_ID
  • sudo docker start $CONTAINER_ID

Dies führt dazu, dass ihre /etc/resolv.conf-Dateien aktualisiert werden, so dass sie auf die neuen Nameserver-Einstellungen zeigen.

DNS-Abfragen in all Ihren Docker-Containern (die Sie seit dem Vornehmen der Änderungen erstellt haben) sollten jetzt mit Ihrem dnsmasq-Container funktionieren!

Als Nebenbemerkung bedeutet dies, dass Andockcontainer auf anderen Hosts auch Ihren dnsmasq-Dienst auf diesem Host nutzen können, solange die Nameservereinstellungen ihres Hosts auf die Verwendung der öffentlichen IP-Adresse dieses Servers eingestellt sind.

    
Programster 11.04.2014, 13:06
quelle

Tags und Links