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.comfalla).
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.confmanera:luego, reinicie ambos
fuente
/etc/default/dockerya no tiene ningún efecto. Vea mi solución sobre cómo resolver esto en un mundo post-init.d / upstart./etc/NetworkManager/NetworkManager.confno existe en Ubuntu 18.04 LTS. : /systemd-resolvedestá 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-resolvedo usar la--dnsopció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 installdesde un repositorio personalizado en la VPN , dentro del contenedor.npmno puede hacer una búsqueda de DNS exitosaUbuntu utiliza de manera predeterminada
dnsmasqiniciado por NetworkManager para almacenar en caché las solicitudes de DNS y se configura/etc/resolv.confpara apuntar a esta instancia en127.0.1.1/etc/resolv.confque sobrescribe la configuración de NetworkManager/etc/resolv.confal contenedor por defectodnsmasqsituación.docker0puente de red a los servidores DNS a través deltap0adaptador VPN .La solución :
Parece ser más elegante usar NetworkManager y es una
dnsmasqinstancia cautiva en la forma en que fue diseñado.Dile a Docker que use tu
dnsmasqinstancia para DNSAgregue o edite el archivo
/etc/docker/daemon.jsonpara indicarle a Docker que use eldocker0adaptador de puente para DNSConfigure la
dnsmasqinstancia 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.confNo 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.confen la conexión y ahora todo el DNS vuelve a pasardnsmasq)Agregue un archivo de configuración para indicarle
dnsmasqque 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
nslookupsin problemas cuando esté en VPN, para dominios tanto dentro como fuera de su VPN.fuente
cannot unmarshal string into Go value of type []stringal 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/bashNo 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.8servidor 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.conftendrá 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-composeejecuta 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 elnetworkparámetro en la configuración de compilación (requiere el formato de archivo v3.4 + ).fuente