¿Cómo configurar un servidor DNS personalizado con Docker?

8

Necesito agregar algunas líneas /etc/hostspara que mi aplicación web funcione dentro de un contenedor Docker.

Docker's /etc/hostses de solo lectura.

Estoy tratando de usar dnsmasq:

DE ubuntu: 14.04
# ...
EJECUTAR apt-get install -y -q dnsmasq
EJECUTAR echo 'listen-address = 127.0.0.1' >> /etc/dnsmasq.conf
EJECUTAR echo 'resolv-file = / etc / resolv.dnsmasq.conf' >> /etc/dnsmasq.conf
EJECUTAR echo 'conf-dir = / etc / dnsmasq.d' >> /etc/dnsmasq.conf
EJECUTAR echo 'usuario = root' >> /etc/dnsmasq.conf
EJECUTAR echo 'nameserver 8.8.8.8' >> /etc/resolv.dnsmasq.conf
EJECUTAR echo 'nameserver 8.8.4.4' >> /etc/resolv.dnsmasq.conf
EJECUTAR echo 'address = "/ mydomain / 127.0.6.1"' >> /etc/dnsmasq.d/0hosts
Ejecutar servicio dnsmasq start

Sin embargo, no puedo hacer que Docker use mi servidor DNS:

$ docker --dns = 127.0.0.1 ejecutar mi / container cat /etc/resolv.conf
servidor de nombres 8.8.8.8
servidor de nombres 8.8.4.4

¿Qué me estoy perdiendo?

Configuración:

  • OS X 10.9.4
  • Docker versión 1.1.0, compilación 79812e3
  • Versión del cliente boot2docker: v1.1.0, Git commit: 7e20d36
Alexander Gladysh
fuente

Respuestas:

9

--dnsfunciona para docker runpero no para docker build. Entonces, la mejor solución es ajustar la configuración globalmente con

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

En Ubuntu puse esta línea en /etc/default/docker

geekQ
fuente
Tenga en cuenta que el /etc/default/dockerarchivo no se utiliza cuando se ejecuta Docker Daemon, debe modificar el daemon.jsonarchivo de configuración. Ver docs.docker.com/engine/reference/commandline/dockerd/…
Davide Icardi
6

Lo que me falta es que estropeé el orden de opciones y argumentos. Si especifico --dnsdespués run, todo funciona bien.

$ docker run --dns = 127.0.0.1 mi / contenedor cat /etc/resolv.conf
servidor de nombres 127.0.0.1

Doh

Alexander Gladysh
fuente
Sin embargo, esto no funciona - dnsmasq está caído ...
Alexander Gladysh
También puede usar la --dnsopción más de una vez. Por ejemplodocker run --dns 8.8.8.8 --dns 127.0.0.1 my/container
Bruno Bieri el