network - docker swarm dns
Docker apt-get update falla (5)
¡Gracias por toda tu ayuda! Descubrí que era un problema de DNS y que se debía a un cortafuegos. Después de buscar un poco más, encontré esta pregunta que no pude encontrar al buscar ''docker apt-get fail''
Docker: las llamadas de red fallan durante la creación de la imagen en la red corporativa
Su problema era similar al mío y la solución me ayudó a que funcionara. He copiado su solución para cualquiera que encuentre esta pregunta en el futuro.
No se pudo acceder a esos servidores de Google desde detrás de nuestro firewall, por lo que no pudimos resolver ninguna URL.
La solución es decirle a Docker qué servidores DNS usar. Esta solución depende de cómo instaló Docker: Paquete de Ubuntu
Si tiene el paquete de Ubuntu instalado, edite / etc / default / docker y agregue la siguiente línea:
DOCKER_OPTS = "- dns <your_dns_server_1> --dns <your_dns_server_2>"
Puede agregar tantos servidores DNS como desee a esta configuración. Una vez que haya editado este archivo, querrá reiniciar su servicio Docker:
sudo service docker restart
Binarios
Si ha instalado Docker a través del método de los binarios (es decir, sin paquete), configure los servidores DNS cuando inicie el demonio Docker:
sudo docker -d -D --dns --dns &
¿Puede alguien ayudarme a conseguir que apt-get trabaje en mi contenedor docker? Cuando intento ejecutar cualquier comando apt-get en mi contenedor docker, el comando falla. Estoy ejecutando Docker versión 1.1.1, compilación bd609d2 en ubuntu 12.04.
Cuando lo hago
$ sudo docker run -i -t ubuntu:14.04 /bin/bash
# apt-get update
Me sale errores diciendo
No se pudo resolver ''archive.ubuntu.com''
Intenté descomentar la línea a continuación en / etc / default / docker
DOCKER_OPTS = "- dns 8.8.8.8 --dns 8.8.4.4"
pero todavía no puedo hacer ping a google.com
ping: host desconocido
Confirmé que el contenedor está utilizando los servidores dns 8.8.8.8 y 8.8.4.4
root @ 0baa87fc6322: / # cat /etc/resolv.conf
servidor de nombres 8.8.8.8
servidor de nombres 8.8.4.4
y puedo hacer ping a ambos servidores, así que estoy bastante seguro de que un firewall no solo está eliminando mis paquetes.
Cualquier ayuda con esto sería apreciada!
¡Gracias!
Estoy usando la versión de Mint y después de instalar Docker e intentar crear una imagen de Ubuntu para hacer que el comando apt-get update no reconozca, para remediar el problema, hice un cambio.
docker run -it -p 8080:80 ubuntu /bin/bash
echo "91.189.92.201 archive.ubuntu.com" >> /etc/hosts
cat /etc/hosts
apt-get update
Me encuentro con el problema en dos casos diferentes y la resolución fue diferente ...
El primero con Win7 + virtualbox (Xubuntu 16.04) Este comentario hizo el trabajo: https://.com/a/29659783/2260796
Modifico el archivo / etc / default / docker:
DOCKER-OPTS = "- ip-masq = true --dns my_ip_dns_win --dns 8.8.8.8 --dns 8.8.4.4" Y ejecute sudo service docker restart
La segunda en un sistema operativo Xubuntu (ubuntu 16.04) La resolución precedente no fue suficiente. Este comentario hizo el trabajo: https://github.com/docker/docker/issues/1809 Tuve que comentar una línea en el archivo /etc/NetworkManager/NetworkManager.conf:
dns = dnsmasq
Entonces corre
reinicio de sudo administrador de red
Primero verifique si tiene conexión, haga ping directamente a la ip 91.189.92.201
que archive.ubuntu.com
apunta a:
ping 91.189.92.201
Si aún no puede comunicarse con el host, no es un problema de DNS.
Además si tienes conexión a internet, puedes hacer un hack. Simplemente coloque una fila en el /etc/hosts
y el problema se solucionó:
91.189.92.201 archive.ubuntu.com
Si ve un error como Could not resolve ...
, es probable que sea una configuración de DNS.
Lo primero que se debe verificar es ejecutar cat /etc/resolv.conf
en el contenedor de la cat /etc/resolv.conf
acoplable . Si tiene un servidor DNS no válido, como el nameserver 127.0.xx
, entonces el contenedor no podrá resolver los nombres de dominio en direcciones IP, por lo que fallará ping google.com
.
Lo segundo que hay que verificar es ejecutar cat /etc/resolv.conf
en la máquina host . Docker básicamente copia el /etc/resolv.conf
del /etc/resolv.conf
al contenedor cada vez que se inicia un contenedor. Entonces, si el host /etc/resolv.conf
es incorrecto, también lo hará el contenedor docker.
Si ha encontrado que el /etc/resolv.conf
del /etc/resolv.conf
es incorrecto, tiene 2 opciones:
Codifique el servidor DNS en daemon.json. Esto es fácil, pero no ideal si espera que el servidor DNS cambie.
Arreglar el
/etc/resolv.conf
los/etc/resolv.conf
. Esto es un poco más complicado, pero se genera dinámicamente y no está codificando el servidor DNS.
1. Servidor DNS Hardcode en docker daemon.json
Editar
/etc/docker/daemon.json
{ "dns": ["10.1.2.3", "8.8.8.8"] }
Reinicie el demonio docker para que esos cambios surtan efecto:
sudo systemctl restart docker
Ahora, cuando ejecute / inicie un contenedor, la
/etc/resolv.conf
acoplable/etc/resolv.conf
con los valores dedaemon.json
.
2. Arreglar el /etc/resolv.conf
los /etc/resolv.conf
A. Ubuntu 16.04 y anteriores
Para Ubuntu 16.04 y
/etc/resolv.conf
anteriores,/etc/resolv.conf
fue generado dinámicamente por NetworkManager.Comente la línea
dns=dnsmasq
(con un#
) en/etc/NetworkManager/NetworkManager.conf
Reinicie el NetworkManager para regenerar
/etc/resolv.conf
:
sudo systemctl restart network-manager
Verificar en el host:
cat /etc/resolv.conf
B. Ubuntu 18.04 y posteriores
Ubuntu 18.04 cambió para usar
systemd-resolved
para generar/etc/resolv.conf
. Ahora, de forma predeterminada, utiliza un caché 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, que puede fallar para las personas detrás de un firewall./etc/resolv.conf
es en realidad un enlace simbólico (ls -l /etc/resolv.conf
) que apunta a/run/systemd/resolve/stub-resolv.conf
(127.0.0.53) por defecto en Ubuntu 18.04.Simplemente cambie el enlace simbólico para que apunte a
/run/systemd/resolve/resolv.conf
, que enumera los servidores DNS reales:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Verificar en el host:
cat /etc/resolv.conf
Ahora debería tener un /etc/resolv.conf
válido en el host para que la /etc/resolv.conf
acoplable lo copie en los contenedores.