Tengo una nueva instalación de Ubuntu 14.04 y quiero usar Docker para ejecutar mis cosas viejas que necesitan 12.04. El DNS dentro de Docker no funciona.
El resolv.conf de mi computadora portátil se ve así:
nameserver 127.0.0.1
Lo cual no funciona con Docker, aparentemente. Por lo tanto, intenta establecer los servidores de nombres en 8.8.8.8 y 8.8.4.4; Cuando lo hago
$ sudo docker run -i -t ubuntu /bin/bash
Dice:
WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it. Using default external servers : [8.8.8.8 8.8.4.4]
Y efectivamente, dentro de la instancia de Docker, resolv.conf se ve así:
nameserver 8.8.8.8
nameserver 8.8.4.4
Puedo hacer ping a ambos con éxito desde la instancia de Docker. Sin embargo, no hay DNS (por ejemplo, ping google.com
falla).
Salida de ifconfig dentro de Docker:
eth0 Link encap:Ethernet HWaddr aa:e9:9f:83:9d:92
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::a8e9:9fff:fe83:9d92/64 Scope:Link
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:648 (648.0 B) TX bytes:738 (738.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
¿Ahora que?
fuente
No uso Docker yo mismo, por lo que normalmente no me toparía aquí con una pregunta de Docker, pero estaba leyendo sobre eso y me topé con alguna documentación de Docker que parece abordar este problema exacto . Para resumir...
La documentación sugiere algunas soluciones alternativas. El primero es especificar el servidor DNS que utilizará el demonio de Docker para los contenedores agregando la siguiente línea a
/etc/default/docker
:donde el DNS proporcionado podría ser un servidor DNS local, como 192.168.1.1 (puerta de enlace). Luego, reinicie con
Una solución alternativa implica deshabilitar dnsmasq en NetworkManager comentando la configuración de la siguiente
/etc/NetworkManager/NetworkManager.conf
manera:luego, reinicie ambos
fuente
/etc/default/docker
ya no tiene ningún efecto. Vea mi solución sobre cómo resolver esto en un mundo post-init.d / upstart./etc/NetworkManager/NetworkManager.conf
no existe en Ubuntu 18.04 LTS. : /systemd-resolved
está actuando como un servidor DNS de almacenamiento en caché de forma predeterminada y provocará elWARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it.
problema (las configuraciones de Ubuntu 16.04 no parecen habilitarlo de manera predeterminada). La solución alternativa es desactivarsystemd-resolved
o usar la--dns
opción al iniciar el contenedor como se menciona en la respuesta principal.Me encontré con esto en mi situación, que es específicamente
npm install
desde un repositorio personalizado en la VPN , dentro del contenedor.npm
no puede hacer una búsqueda de DNS exitosaUbuntu utiliza de manera predeterminada
dnsmasq
iniciado por NetworkManager para almacenar en caché las solicitudes de DNS y se configura/etc/resolv.conf
para apuntar a esta instancia en127.0.1.1
/etc/resolv.conf
que sobrescribe la configuración de NetworkManager/etc/resolv.conf
al contenedor por defectodnsmasq
situación.docker0
puente de red a los servidores DNS a través deltap0
adaptador VPN .La solución :
Parece ser más elegante usar NetworkManager y es una
dnsmasq
instancia cautiva en la forma en que fue diseñado.Dile a Docker que use tu
dnsmasq
instancia para DNSAgregue o edite el archivo
/etc/docker/daemon.json
para indicarle a Docker que use eldocker0
adaptador de puente para DNSConfigure la
dnsmasq
instancia de NM para escuchar también los puentes de Docker, porque de forma predeterminada solo escucha 127.0.1.1 - crear archivo/etc/NetworkManager/dnsmasq.d/docker-bridge.conf
No me gusta el comportamiento grosero de ese cliente VPN y prefiero usar solo el DNS en el extremo VPN para las búsquedas VPN (si tiene un cliente VPN educado que usa NetworkManager configurado correctamente, no tendrá que hacer esto )
resolv.conf
en la conexión y ahora todo el DNS vuelve a pasardnsmasq
)Agregue un archivo de configuración para indicarle
dnsmasq
que dirija las solicitudes de DNS para su dominio de manera apropiada: agregue el archivo `/etc/NetworkManager/dnsmasq.d/vpn-dns.confOpcionalmente, agregue un dominio de búsqueda para su dominio para que pueda usar nombres cortos
Reinicie NetworkManager y Docker
En este punto, sus contenedores Docker deberían poder funcionar
nslookup
sin problemas cuando esté en VPN, para dominios tanto dentro como fuera de su VPN.fuente
cannot unmarshal string into Go value of type []string
al reiniciar el servicio docker.Así es como configuré docker en mi servidor Ubuntu 14.04 sin cabeza.
Estoy ejecutando el servidor Ubuntu 14.04 con la siguiente versión acoplada instalada.
El archivo /etc/init/docker.io.conf y el script contienen la siguiente línea:
La respuesta anterior me ayudó a encontrar el archivo anterior.
Descomenté lo siguiente en /etc/default/docker.io y agregué mi servidor DNS local:
Reinició el servicio con:
Corrió
docker run <image> /bin/bash
No hay mensajes dns al iniciar el contenedor.
Comenzó un nuevo contenedor, instaló dnsutils.
Ran dig y el mensaje del servidor es el servidor DNS local correcto.
fuente
Tuve un problema similar, lo informé a StackOverflow . Parece que no pude consultar el
8.8.8.8
servidor de nombres que se especifica en la instalación predeterminada de Ubuntu de Docker; Sin embargo, podría hacer ping. En este caso, use un servidor DNS que realmente pueda consultar. Prueba cone iniciar el contenedor a través de
Todavía tengo que encontrar una manera de https://askubuntu.com/q/607172/30266 para derivar una solución automática.
fuente
Puede usar el solucionador DNS local del host (por ejemplo
dnsmasq
) de sus contenedores Docker si están en una red definida por el usuario . En ese caso, un contenedor/etc/resolv.conf
tendrá el servidor de nombres127.0.0.11
(también conocido como el servidor DNS incorporado de Docker ), que puede reenviar correctamente las solicitudes DNS a la dirección de bucle invertido del host.Si lo usa
docker-compose
, configurará una red personalizada para sus contenedores automáticamente (con un formato de archivo v2 + ). Sin embargo, tenga en cuenta que si biendocker-compose
ejecuta contenedores en una red definida por el usuario, aún los construye en la red predeterminada . Para utilizar una red personalizada para compilaciones, puede especificar elnetwork
parámetro en la configuración de compilación (requiere el formato de archivo v3.4 + ).fuente