Docker build error Unable to connect Failed to fetch
Hola.
En este post voy a escribir acerca de un error que sale al intentar crear una imagen para Docker en la que hay instrucciones que requieren una descarga de archivos de internet.
Es importante mencionar que estoy usando una máquina virtual Oracle Linux corriendo en VirtualBox.
Mi archivo Dockerfile se ve así:
FROM debian:jessie-slim
ADD . /
RUN chmod 755 /scripts/*.sh && apt-get update && apt-get --no-install-recommends -y install unzip ssh net-tools && apt-get clean && rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["/scripts/start.sh"]
Al intentar ejecutar docker build obtengo error:
[oracle@localhost docker]$ sudo docker build -t dev/app .
En este caso la instrucción que provoca el error es app-get update la cual intenta descargar librerías de internet. Esta instrucción en particular es la que me estaba ocasionando los siguientes errores:
Step 4/5 : RUN chmod 755 /scripts/*.sh && apt-get update && apt-get --no-install-recommends -y install unzip ssh net-tools && apt-get clean && rm -rf /var/lib/apt/lists/*
---> Running in 4f1b0ff0f6dc
Err http://security.debian.org jessie/updates InRelease
Err http://security.debian.org jessie/updates Release.gpg
Unable to connect to security.debian.org:http: [IP: 151.101.64.204 80]
.
.
Err http://deb.debian.org jessie Release.gpg
Unable to connect to deb.debian.org:http:
Err http://deb.debian.org jessie-updates Release.gpg
Unable to connect to deb.debian.org:http:
Reading package lists...
W: Failed to fetch http://deb.debian.org/debian/dists/jessie/InRelease
W: Failed to fetch http://security.debian.org/debian-security/dists/jessie/updates/InRelease
W: Failed to fetch http://deb.debian.org/debian/dists/jessie-updates/InRelease
.
.
W: Some index files failed to download. They have been ignored, or old ones used instead.
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package unzip
E: Unable to locate package ssh
E: Unable to locate package net-tools
The command '/bin/sh -c chmod 755 /scripts/*.sh && apt-get update && apt-get --no-install-recommends -y install unzip ssh net-tools && apt-get clean && rm -rf /var/lib/apt/lists/*' returned a non-zero code: 100
Como ven el error es de comunicación, aunque la verdad es que me tomó mucho tiempo darme cuenta de esto. Inicialmente creí que las rutas estaban desactualizadas y que por eso fallaba al intentar descargarlas.
Intenté accediendo las rutas directamente con un navegador de internet y me confundía porque algunas sí existían y algunas no.
Después de investigar en internet, la razón puede ser que la conexión de red que utiliza Docker no está conectada y provoca este tipo de errores.
Para checar si la conexión de internet está funcionando pueden intentar el siguiente comando:
[oracle@localhost docker]$ sudo docker run busybox nslookup google.com
;; connection timed out; no servers could be reached
Solución
La solución que me funcionó fue agregar el parámetro --network=host en la instrucción de docker build. Esto indica que se utilice la configuración de red del host desde donde se está ejecutando el comando.[oracle@localhost docker]$ sudo docker build --network=host -t dev:app .
Con este parámetro pude finalmente lograr la descarga y actualización de paquetes correspondientes.
Espero les sirva.