subir imagen hub example ejemplos desde crear contenedor compose cero dns docker

dns - hub - Docker: las llamadas de red fallan durante la creación de la imagen en la red corporativa



imagen docker ubuntu (5)

Tengo problemas para crear imágenes de Docker en mi red corporativa. Estoy empezando con Docker, así que tengo el siguiente Dockerfile para una aplicación 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. Reduce las dependencias requeridas 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 de download.fedoraproject.org, con este mensaje de error:

Paso 2: RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm ---> Ejecutando en e0c26afe9ed5 curl: (5) Couldn '' t resuelve el error proxy ''some.proxy.address'': omitiendo http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm - error de transferencia

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

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


Aconsejo cambiar la configuración de DNS del daemon Docker. Puede establecer las opciones predeterminadas para el daemon docker creando un archivo de configuración de daemon 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 necesitas reiniciar el servicio del acoplador:

sudo service docker restart

La explicación paso a paso está disponible aquí. Fix Docker''s network DNS config


Docker (al menos> = 1.13, probablemente antes) en Mac y Windows le permiten configurar el DNS en Preferencias -> Daemon -> Avanzado:

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


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

  • Identificar 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"

  • Reinicie el servicio del acoplador

sudo service docker.io restart


Para cualquier distribución de Linux que funcione 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

La ruta 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 daemon.

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://


Pude descubrir el problema. En Ubuntu, Docker establece los servidores DNS para el contenedor en los servidores de Google en 8.8.8.x. Según tengo entendido, esta es una solución en Ubuntu debido al hecho de que Ubuntu establece /etc/resolv.conf para 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 decirle a Docker qué servidores DNS usar. Esta solución depende de cómo instaló Docker:

Paquete de Ubuntu

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 instaló Docker mediante el método binario (es decir, sin paquete), configurará los servidores DNS cuando inicie el daemon Docker:

sudo docker -d -D --dns <your_dns_server_1> --dns <your_dns_server_2> &