No puedo ejecutar ningún comando que requiera conexión a Internet dentro de ningún contenedor Docker.
Trabajos:
docker run ubuntu /bin/echo 'Hello world'
No funciona:
docker run ubuntu apt-get update
Err:1 http://archive.ubuntu.com/ubuntu xenial InRelease
Temporary failure resolving 'archive.ubuntu.com'
Err:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease
Temporary failure resolving 'archive.ubuntu.com'
Err:3 http://archive.ubuntu.com/ubuntu xenial-security InRelease
Temporary failure resolving 'archive.ubuntu.com'
Reading package lists...
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial/InRelease Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-updates/InRelease Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-security/InRelease Temporary failure resolving 'archive.ubuntu.com'
Similar con pipy ping.
Estoy en Ubuntu 16.04 y no estoy usando firewall o servidor proxy corporativo y he intentado reiniciar Docker.
Upd:
La actualización en modo interactivo falla de la misma manera.
docker exec -ti angry_goodall /bin/bash
apt-get update
#fails
ping google.com
#fails with "unknown host" message
ping 8.8.8.8
# shows PING 8.8.8.8 (8.8.8.8): 56 data bytes
# and than hangs indefinetly
sudo apt-get update se ejecuta con éxito en el host, es decir, en mi computadora fuera de la ventana acoplable.
Upd Docker versión 1.12.1, compilación 23cf638
networking
ubuntu
docker
Sashko Lykhenko
fuente
fuente

apt-get updateen modo interactivo con la ventana acoplable?Respuestas:
Según lo sugerido por creack en el problema GitHub # 866 para Docker :
"Obligará a Docker a recrear el puente y reiniciar todas las reglas de red"
fuente
-dbandera no sale.Hay un problema similar en StackOverflow donde una solución diferente resuelve este problema con Docker 17.09 en Ubuntu 16.04:
Verifique el contenido de
resolv.conf:Si incluye una línea como
nameserver 127.0.1.1esta, significa que los contenedores están obteniendo un servidor de nombres incorrecto. Para arreglar esto, edite elNetworkManager.confarchivo:Y comentar la línea con
dns=dnsmasq; el archivo debería verse así:Finalmente, reinicie el administrador de red:
Pruebe nuevamente el contenedor:
fuente
Lo primero que debe verificar es ejecutar
cat /etc/resolv.confen el contenedor acoplable . Si tiene un servidor DNS no válido, comonameserver 127.0.x.x, entonces el contenedor no podrá resolver los nombres de dominio en direcciones IP, porping google.comlo que fallará.La segunda cosa a verificar se ejecuta
cat /etc/resolv.confen la máquina host . Docker básicamente copia el host/etc/resolv.confal contenedor cada vez que se inicia un contenedor. Entonces, si el host/etc/resolv.confestá equivocado, también lo hará el contenedor docker.Si descubrió que el host
/etc/resolv.confestá equivocado, entonces tiene 2 opciones:Codifique el servidor DNS en daemon.json. Esto es fácil, pero no es ideal si espera que cambie el servidor DNS.
Arreglar los anfitriones
/etc/resolv.conf. Esto es un poco más complicado, pero se genera dinámicamente y no está codificando el servidor DNS.1. Hardcode servidor DNS en docker daemon.json
Editar
/etc/docker/daemon.jsonReinicie el docker daemon para que esos cambios surtan efecto:
sudo systemctl restart dockerAhora, cuando ejecuta / inicia un contenedor, Docker se completará
/etc/resolv.confcon los valores dedaemon.json.2. Arreglar los hosts
/etc/resolv.confA. Ubuntu 16.04 y anterior
Para Ubuntu 16.04 y versiones anteriores,
/etc/resolv.conffue generado dinámicamente por NetworkManager.Comente la línea
dns=dnsmasq(con a#) en/etc/NetworkManager/NetworkManager.confReinicie el NetworkManager para regenerar
/etc/resolv.conf:sudo systemctl restart network-managerVerificar en el host:
cat /etc/resolv.confB. Ubuntu 18.04 y posterior
Ubuntu 18.04 cambió para usar
systemd-resolvedpara generar/etc/resolv.conf. Ahora, por defecto, utiliza un caché de DNS local 127.0.0.53. Eso no funcionará dentro de un contenedor, por lo que Docker usará de forma predeterminada el servidor DNS 8.8.8.8 de Google, lo que puede dañar a las personas que se encuentran detrás de un firewall./etc/resolv.confen realidad es un enlace simbólico (ls -l /etc/resolv.conf) que apunta a/run/systemd/resolve/stub-resolv.conf(127.0.0.53) de forma predeterminada en Ubuntu 18.04.Simplemente cambie el enlace simbólico al que apunta
/run/systemd/resolve/resolv.conf, que enumera los servidores DNS reales:sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.confVerificar en el host:
cat /etc/resolv.confAhora debería tener un válido
/etc/resolv.confen el host para que Docker lo copie en los contenedores.fuente