Comment configurer un serveur DNS personnalisé avec Docker?

8

J'ai besoin d'ajouter quelques lignes pour /etc/hostsque mon application Web fonctionne dans un conteneur Docker.

Docker /etc/hostsest en lecture seule.

J'essaie d'utiliser dnsmasq:

DE 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 service dnsmasq start

Cependant, je ne peux pas demander à Docker d'utiliser mon serveur DNS:

$ docker --dns = 127.0.0.1 exécutez mon / container cat /etc/resolv.conf
serveur de noms 8.8.8.8
serveur de noms 8.8.4.4

Qu'est-ce que je rate?

Configuration:

  • OS X 10.9.4
  • Docker version 1.1.0, build 79812e3
  • Boot2docker Client version: v1.1.0, Git commit: 7e20d36
Alexander Gladysh
la source

Réponses:

9

--dnsfonctionne pour docker runmais pas pour docker build. La meilleure solution consiste donc à ajuster les paramètres globalement avec

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

Sur Ubuntu, je mets cette ligne en /etc/default/docker

geekQ
la source
Notez que le /etc/default/dockerfichier n'est pas utilisé lorsque le démon docker est exécuté, vous devez modifier le daemon.jsonfichier de configuration. Voir docs.docker.com/engine/reference/commandline/dockerd/…
Davide Icardi
6

Ce qui me manque, c'est que j'ai foiré l'ordre des options et des arguments. Si je précise --dnsaprès run, tout fonctionne bien.

$ docker run --dns = 127.0.0.1 my / container cat /etc/resolv.conf
serveur de noms 127.0.0.1

Doh.

Alexander Gladysh
la source
Cela ne fonctionne pas cependant - dnsmasq est en panne ...
Alexander Gladysh
Vous pouvez également utiliser l' --dnsoption plusieurs fois. Par exempledocker run --dns 8.8.8.8 --dns 127.0.0.1 my/container
Bruno Bieri