Wie konfiguriere ich einen benutzerdefinierten DNS-Server mit Docker?

8

Ich muss ein paar Zeilen hinzufügen, /etc/hostsdamit meine Web-App in einem Docker-Container funktioniert.

Docker /etc/hostsist schreibgeschützt.

Ich versuche, dnsmasq zu verwenden:

AB Ubuntu: 14.04
# ...
RUN apt-get install -y -q dnsmasq
RUN echo 'listen-address = 127.0.0.1' >> /etc/dnsmasq.conf
RUN echo 'resolv-file = / etc / resolv.dnsmasq.conf' >> /etc/dnsmasq.conf
RUN echo 'conf-dir = / etc / dnsmasq.d' >> /etc/dnsmasq.conf
RUN echo 'user = root' >> /etc/dnsmasq.conf
RUN echo 'Nameserver 8.8.8.8' >> /etc/resolv.dnsmasq.conf
RUN echo 'Nameserver 8.8.4.4' >> /etc/resolv.dnsmasq.conf
RUN echo 'address = "/ mydomain / 127.0.6.1"' >> /etc/dnsmasq.d/0hosts
RUN-Dienst dnsmasq starten

Ich kann Docker jedoch nicht dazu bringen, meinen DNS-Server zu verwenden:

$ docker --dns = 127.0.0.1 Führen Sie meine / container cat /etc/resolv.conf aus
Nameserver 8.8.8.8
Nameserver 8.8.4.4

Was vermisse ich?

Aufbau:

  • OS X 10.9.4
  • Docker Version 1.1.0, Build 79812e3
  • boot2docker Client-Version: v1.1.0, Git-Commit: 7e20d36
Alexander Gladysh
quelle

Antworten:

9

--dnsfunktioniert für docker runaber nicht für docker build. Eine bessere Lösung besteht darin, die Einstellungen global mit anzupassen

DOCKER_OPTS="--dns=my-private-dns-server-ip --dns=8.8.8.8"

Unter Ubuntu habe ich diese Zeile eingefügt /etc/default/docker

geekQ
quelle
Beachten Sie, dass die /etc/default/dockerDatei nicht verwendet wird, wenn der Docker-Daemon ausgeführt wird. Sie sollten die daemon.jsonKonfigurationsdatei ändern . Siehe docs.docker.com/engine/reference/commandline/dockerd/…
Davide Icardi
6

Was mir fehlt, ist, dass ich die Reihenfolge der Optionen und Argumente durcheinander gebracht habe. Wenn ich angeben , --dnsnach run, funktioniert alles einwandfrei .

$ docker run --dns = 127.0.0.1 my / container cat /etc/resolv.conf
Nameserver 127.0.0.1

Doh.

Alexander Gladysh
quelle
Dies funktioniert jedoch nicht - dnsmasq ist ausgefallen ...
Alexander Gladysh
Sie können die --dnsOption auch mehrmals verwenden. Zum Beispieldocker run --dns 8.8.8.8 --dns 127.0.0.1 my/container
Bruno Bieri