dns - essential - instalar apt-get en debian
Dockerfile: Docker build no puede descargar paquetes: centos-> yum, debian/ubuntu-> apt-get behind intranet (6)
PROBLEMA: No se puede compilar ninguna compilación con un Dockerfile que dependa de centos, ubuntu o debian.
MEDIO AMBIENTE: Tengo un Mac OS X, ejecutando VMWare con un invitado Ubuntu 14.04, ejecutando Docker:
mdesales@ubuntu ~ $ sudo docker version
Client version: 1.1.2
Client API version: 1.13
Go version (client): go1.2.1
Git commit (client): d84a070
Server version: 1.1.2
Server API version: 1.13
Go version (server): go1.2.1
Git commit (server): d84a070
COMPORTAMIENTO: El uso de "docker build" no puede descargar paquetes. Aquí hay un ejemplo de dicho archivo Docker: https://github.com/Krijger/docker-cookbooks/blob/master/jdk8-oracle/Dockerfile , https://github.com/ottenhoff/centos-java/blob/master/Dockerfile
Sé que podemos ejecutar un contenedor con --dns, pero esto es durante el tiempo de compilación.
CENTOS
DESDE centos RUN yum install abc
UBUNTU
DESDE ubuntu RUN apt-get install abc
Los usuarios informaron que podría haber problemas con la configuración de DNS, otros y la configuración tiene los servidores DNS de Google comentados.
Step 2 : RUN yum install -y curl; yum upgrade -y; yum update -y; yum clean all
---> Running in 5f11b65c87b8
Loaded plugins: fastestmirror
Couldn''t resolve host ''mirrorlist.centos.org
Aún así, el problema persistía ... Entonces, la mayoría de los usuarios en # docker @ Freenode mencionaron que podría ser un problema con la configuración de DNS ... Así que aquí está mi Ubuntu:
$ sudo cat /etc/resolv.conf
nameserver 127.0.1.1
search localdomain
Intenté cambiar eso, el mismo problema ...
Además, al agregar los servidores de nombres del host (en mi caso, mac osx) a la docker-machine vm, se resuelve el problema.
En mi caso, el problema es que el DNS de nuestra compañía tiene fallas en algunas formas, lo que requiere manipular /etc/hosts
, y para /etc/docker/daemon.json
, /etc/docker/daemon.json
. Ese es el archivo que ocultaba el error:
{
"dns": ["10.5...", "10.5...", "10.5..."]
}
He respaldado esto y lo he reemplazado por
{
"dns": ["8.8.8.8", "8.8.4.4"]
}
Y comenzó a funcionar. Estoy buscando una solución que funcione en todos los casos, en nuestra VPN que necesita los servidores DNS personalizados, así como el hogar en una red normal.
Tenga en cuenta que en Linux moderno, se genera /etc/hosts
y DNS es administrado por SystemD. No estoy seguro de cómo Docker maneja esto, pero tal vez podría ser suficiente para señalar el DNS falso de SystemD en 127.0.0.53
.
Es probable que se deba a que el servidor de nombres de caché local está escuchando en 127.0.1.1, al que no se puede acceder desde el contenedor.
Intente poner lo siguiente en su Dockerfile
:
CMD "sh" "-c" "echo nameserver 8.8.8.8 > /etc/resolv.conf"
Para mí, el problema fue que mi ISP bloqueó el DNS de Google (8.8.8.8) que Docker usa como predeterminado.
El truco aquí es descubrir su DNS IP y decirle a la ventana acoplable que lo use.
En mi caso (ejecutando Ubuntu 17.04), tratando de obtener esta información de /etc/resolv.conf
no funcionó, pero utilicé este comando:
nmcli dev show | grep IP4.DNS
Luego tomé esta IP y agregué en /etc/defaults/docker
:
DOCKER_OPTS="--dns 192.168.50.1"
Ahora reinicie su daemon docker e intente construir nuevamente.
Tenía bastante el mismo problema. La solución provista no ayudó en mi caso. Pero funcionó tan pronto como actualicé mi Dockerfile añadiendo variables de entorno para el proxy en él.
ENV HTTP_PROXY http://<proxy_host>:<port>
ENV HTTPS_PROXY http://<proxy_host>:<port>
ENV http_proxy http://<proxy_host>:<port>
ENV https_proxy http://<proxy_host>:<port>
PROBLEMA
Hablando con algunos desarrolladores en # docker @ freenode, el problema estaba claro para todos: DNS y el medio ambiente. La compilación funciona bien con una conexión a Internet normal en casa.
SOLUCIÓN:
Este problema ocurre en un entorno que tiene un servidor DNS privado o la red bloquea los servidores DNS de Google. Incluso si el contenedor acoplable puede hacer ping a 8.8.8.8, la construcción aún necesita tener acceso al mismo servidor DNS privado detrás de su firewall o Centro de datos.
Inicie el daemon Docker con el modificador --dns para apuntar a su servidor DNS privado, al igual que su sistema operativo host está configurado. Eso fue encontrado por ensayo y error.
Detalles
Mi MAC OS X, sistema operativo host, tenía un DNS diferente configurado en mi /etc/resolv.conf:
mdesales@Marcello-Work ~ (mac) $ cat /etc/resolv.conf
search corp.my-private-company.net
nameserver 172.18.20.13
nameserver 172.20.100.29
Mi anfitrión podría estar soltando los paquetes en la dirección de IP de Google 8.8.8.8 mientras construía ... Tomé esas 2 direcciones IP y las coloqué bajo la configuración del daemon de docker de Ubuntu:
mdesales@ubuntu ~ $ cat /etc/default/docker
...
...
# Use DOCKER_OPTS to modify the daemon startup options.
DOCKER_OPTS="--dns 172.18.20.13 --dns 172.20.100.29 --dns 8.8.8.8"
...
¡La construcción ahora funciona como se esperaba!
$ sudo ./build.sh
Sending build context to Docker daemon 7.168 kB
Sending build context to Docker daemon
Step 0 : FROM centos
---> b157b77b1a65
Step 1 : MAINTAINER [email protected]
---> Running in 49bc6e233e4c
---> 2a380810ffda
Removing intermediate container 49bc6e233e4c
Step 2 : RUN yum install -y curl; yum upgrade -y; yum update -y; yum clean all
---> Running in 5f11b65c87b8
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: mirror.supremebytes.com
* extras: centos.mirror.ndchost.com
* updates: mirrors.tummy.com
Resolving Dependencies
--> Running transaction check
---> Package systemd.x86_64 0:208-11.el7 will be updated
---> Package systemd.x86_64 0:208-11.el7_0.2 will be an update
---> Package systemd-libs.x86_64 0:208-11.el7 will be updated
---> Package systemd-libs.x86_64 0:208-11.el7_0.2 will be an update
--> Finished Dependency Resolution
¡Gracias a @BrianF y a otros que ayudaron en el canal de IRC!
Solución de VM permanente - ACTUALIZACIÓN 2 DE JULIO DE 2015
Ahora tenemos GitHub Enterprise y CoreOS Enterprise Docker Registry en la mezcla ... Por lo tanto, era importante para mí agregar los servidores DNS corporativos de la máquina HOST para que la VM también funcione.
¡Reemplazar el /etc/resolv.conf del SO huésped con el /etc/resolv.conf del Host también resolvió el problema! Docker 1.7.0. Acabo de crear una nueva máquina virtual usando Ubuntu 15.04 en VMWare Fusion y volví a tener este problema ...
/etc/resolv.conf ANTES
~/dev/github/public/stackedit on ⭠ master ⌚ 20:31:02
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1
search localdomain
/etc/resolv.conf DESPUÉS *
~/dev/github/public/stackedit on ⭠ master ⌚ 20:56:09
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
search corp.mycompany.net
nameserver 10.180.194.35
nameserver 10.180.194.36
nameserver 192.168.1.1