Docker anula mi archivo /etc/resolv.conf dentro de contenedores

17

Quiero configurar mi resin/rpi-raspbian:jessiecontenedor /etc/resolv.confpara:

nameserver 208.67.222.222
nameserver 208.67.220.220

Mi Dockerfile tiene la siguiente línea:

ADD resolv.conf /etc/resolv.conf

Este archivo agregado contiene los servidores de nombres correctos.

Mi host Docker /etc/resolv.confcontiene la información correcta.

Estoy ejecutando el contenedor de esta manera:

docker run -itd --cap-add=NET_ADMIN --device /dev/net/tun \
-v /home/pi/share/ovpn:/ovpn \
--privileged --network=internet_disabled --name vpn-client \
--dns=208.67.222.222 \
openvpn-client_nat-gateway /bin/bash

A pesar de todo esto, el contenedor da este resultado:

root@642b0f4716ba:/# cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0

Es solo después de cambiar el resolv.conf manualmente desde el contenedor (o con Docker Exec) que se ve bien.

Prefiero evitar tener que arreglarlo con un comando exec. Alguien tiene una idea de lo que está pasando aquí?

Duncan Marshall
fuente
Hay algunos casos descritos en su wiki que podrían explicar su situación.
Julie Pelletier
Echa un vistazo a mi pregunta y la respuesta.
Zeinab Abbasimazar

Respuestas:

14

AFAIK, Docker anula algunos archivos en una imagen cuando se inicia , incluso si fueron AGREGADOS en Dockerfile. Esto seguramente incluye /etc/hosts, y lo más probable es que /etc/resolv.conftambién ocurra lo mismo . Aparentemente, esto se usa para construir correctamente la red "interna" predeterminada de Docker (para que las imágenes se vean entre sí, pero no para el host, etc.) Si está realmente seguro de que desea anular / modificar algunos de esos archivos, creo que debe hacer eso como parte de las acciones de tiempo de ejecución, es decir, como parte de la CMDlínea. Por ejemplo:

...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
        your_old_commands...
akavel
fuente
3
Esto es correcto. /etc/resolv.confse copia del host cuando se inicia un contenedor.
wisbucky
4

Como puedo ver, está utilizando una user-defined networksversión de Docker Engine> = 1.10. Entonces, de la documentación oficial del motor de Docker sobre Embedded DNS server in user-defined networks:

Estas direcciones IP --dns son administradas por el servidor DNS incorporado y no se actualizarán en el archivo /etc/resolv.conf del contenedor.

Su dns tiene que funcionar, pero no lo verá en ningún archivo de configuración.

Referencias .

Thiago Almeida
fuente
0

He resuelto el problema si es la aplicación web para contenedores en Azure.

Hay 2 contenedores mate . Kudu y el anfitrión

Pasos

1.Instale el ssh desde su archivo docker (también incluya una configuración sshd)

2.cree un containerstart.sh (que actualiza resolv.conf)

3. Establezca el punto de entrada dentro de allí

Ahora el host resolv.conf se actualiza y puede usar cualquier dns que desee

PD: Si no puede recoger el DNS personalizado en la red, no se preocupe. Nosotros tampoco podríamos. Es posible que deba reiniciar si está utilizando un entorno ASE

Rıfat Erdem Sahin
fuente