swarm network dns ubuntu-12.04 docker

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:

  1. Codifique el servidor DNS en daemon.json. Esto es fácil, pero no ideal si espera que el servidor DNS cambie.

  2. 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 de daemon.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.