Las llamadas de red fallan durante la creación de imágenes en la red corporativa


Tengo un problema construyendo imágenes Docker en mi red corporativa. Estoy empezando con Docker, así que tengo el siguiente Dockerfile para una aplicación de tipo hello-world:

# DOCKER-VERSION 0.3.4
FROM    centos:6.4
# Enable EPEL for Node.js
RUN     rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# Install Node.js and npm
RUN     yum install -y npm
# Bundle app source
ADD . /src
# Install app dependencies
RUN cd /src; npm install
EXPOSE  8080
CMD ["node", "/src/index.js"]

Esto funciona bien cuando lo construyo en mi computadora portátil en casa, en mi propia red inalámbrica. Elimina las dependencias necesarias y construye la imagen correctamente.

Sin embargo, cuando estoy en mi red corporativa en el trabajo, esta misma compilación docker falla al intentar bajar el RPM desde download.fedoraproject.org, con este mensaje de error:

Paso 2: EJECUTAR rpm-Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm --- >Corriendo en e0c26afe9ed5 curl: (5) No pudo resolver algunos proxy.proxy.dirección" error: omitiendo http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm - la transferencia falló

En mi red corporativa, puedo acceder a esa URL desde mi computadora portátil. Pero una vez que Docker está tratando de construir el contenedor, de repente no se puede resolver en absoluto. Este comportamiento es el mismo para una variedad de recursos externos (apt-get, etc.): Todos pueden resolver muy bien en mi computadora portátil en la red corporativa, pero Docker no puede resolverlos.

No tengo el conocimiento de la red para averiguar qué está pasando aquí. ¿Alguien sabe por qué este extraño comportamiento ocurriría al construir contenedores Docker?

 54
Author: Tim Cooper, 2014-06-11

6 answers

Pude resolver el problema. En Ubuntu, Docker establece los servidores DNS para contenedor en los servidores de Google en 8.8.8.x. Como yo lo entiendo, esta es una solución alternativa en Ubuntu debido al hecho de que Ubuntu establece /etc / resolv.conf debe ser 127.0.0.1.

Esos servidores de Google no eran accesibles desde detrás de nuestro firewall, por lo que no pudimos resolver ninguna URL.

La solución es indicarle a Docker qué servidores DNS usar. Esta solución depende de cómo haya instalado Docker:

Ubuntu Paquete

Si tiene instalado el paquete Ubuntu, 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 binarios (es decir, sin paquete), entonces establece los servidores DNS cuando inicia el demonio Docker:

sudo docker -d -D --dns <your_dns_server_1> --dns <your_dns_server_2> &
 75
Author: dsw88,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-12 16:46:43

Recomiendo cambiar la configuración DNS del demonio Docker. Puede establecer las opciones predeterminadas para el demonio docker creando un archivo de configuración de demonio en /etc/docker/daemon.json . Establezca el servidor DNS de acuerdo con su máquina host, por ejemplo, mi servidor DNS es 10.0.0.2:

{"dns": ["10.0.0.2", "8.8.8.8"] }

Entonces solo necesita reiniciar el servicio docker:

sudo service docker restart

La explicación paso a paso está disponible aquí Arreglar la configuración de DNS de red de Docker

 40
Author: l.augustyniak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-19 21:05:07

Los siguientes pasos funcionan para mí ( tanto para docker build como para docker run). Mi versión de Linux es Ubuntu 14.04.

  • Identifique DNS usando el siguiente comando.
    nm-tool | grep DNS

Este resultado DNS:192.168.1.1 en mi caso

  • Crear entrada en /etc/default/docker.io. Mi entrada actual se ve así
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --dns 192.168.1.1"
  • Reiniciar el servicio docker
 sudo service docker.io restart 
 17
Author: Balkrishna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-11 06:11:34

Para cualquier distribución Linux que trabaje con SystemD (Ubuntu 16, RHEL 7...), la ruta se mostrará con el siguiente comando:

$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2016-06-29 08:10:33 PDT; 2min 34s ago
     Docs: https://docs.docker.com
 Main PID: 1169 (dockerd)
    Tasks: 19
   Memory: 85.0M
      CPU: 1.779s
   CGroup: /system.slice/docker.service
           ├─1169 /usr/bin/dockerd --dns 172.18.20.11 --dns 172.20.100.15 --dns 8.8.8.8 --dns 8.8.4.4 -H fd://
           └─1232 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-containerd-shim --met

El camino sería /lib/systemd/system/docker.service. Agregue los valores DOCKER_OPTS, que pueden tener cualquiera de los --dns, en la línea donde se inicia el demonio.

cat /lib/systemd/system/docker.service | grep dns 
ExecStart=/usr/bin/dockerd --dns 172.18.20.11 --dns 172.20.100.15 --dns 8.8.8.8 --dns 8.8.4.4  -H fd://
 9
Author: Marcello de Sales,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-29 15:47:15

Docker (al menos > = 1.13, probablemente anterior) en Mac y Windows le permite configurar el DNS en Preferencias - > Demonio - > Avanzado:

La siguiente configuración establece dos servidores DNS corporativos (use sus propios valores aquí) con respaldo a los servidores DNS públicos de Google.

Configuración Adv del Demonio Docker

 3
Author: Jason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-23 00:17:41

Especifique su DNS en el demonio Docker.

En primer lugar, obtenga su dirección DNS

$ nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]:                             10.0.0.2

Pruebe si el problema es realmente con el DNS lanzando un contenedor docker forzando este nuevo DNS

$ docker run --dns 10.0.0.2 <image_name> <command_name>

Si esto resuelve el problema, puede aplicar esta corrección para todos los demonios de docker de la siguiente manera

Edite o cree un archivo /etc/docker/daemon.json

Agregue la siguiente línea a este archivo

{
"dns": ["10.0.0.2", "8.8.8.8"]
}

Reiniciar docker

$ sudo service docker restart

Un muy una buena guía para hacer TODO este proceso se puede encontrar aquí.

Https://development.robinwinslow.uk/2016/06/23/fix-docker-networking-dns /

 3
Author: alsora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-13 16:15:13