No puedo instalar paquetes pip dentro de un contenedor docker con Ubuntu

Estoy siguiendo la guía de figuras para usar la ventana acoplable con una aplicación de Python, pero cuando la ventana acoplable se pone al mando

RUN pip install -r requirements.txt 

Recibo el siguiente mensaje de error:

 Step 3 : RUN pip install -r requirements.txt ---> Running in fe0b84217ad1 Collecting blinker==1.3 (from -r requirements.txt (line 1)) Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ProtocolError('Connection aborted.', gaierror(-2, 'Name or service not known'))': /simple/blinker/ 

Esto se repite varias veces y luego recibo otro mensaje:

 Could not find any downloads that satisfy the requirement blinker==1.3 (from -r requirements.txt (line 1)) No distributions at all found for blinker==1.3 (from -r requirements.txt (line 1)) 

Entonces, por alguna razón, pip no puede acceder a ningún paquete desde dentro de un contenedor docker. ¿Hay algo que deba hacer para permitir el acceso a Internet?

Sin embargo, pip funciona bien para instalar cosas fuera del contenedor de la ventana acoplable, y funcionó bien incluso con ese paquete exacto ( blinker==1.3 ), por lo que ese no es el problema. Además, este problema no es específico de ese paquete. Tengo el mismo problema con cualquier comando de pip install para cualquier paquete.

¿Alguien tiene alguna idea de lo que está pasando aquí?

Su problema proviene del hecho de que Docker no está utilizando el servidor DNS adecuado. Puedes arreglarlo de tres maneras diferentes:

1. Agregar el DNS de Google a su configuración local

Modificando /etc/resolv.conf y agregando las siguientes líneas al final

# Google IPv4 nameservers nameserver 8.8.8.8 nameserver 8.8.4.4

Si desea agregar otros servidores DNS, eche un vistazo aquí .

Sin embargo, este cambio no será permanente (ver este hilo ). Para hacerlo permanente: $ sudo nano /etc/dhcp/dhclient.conf y edite la línea con el servidor de prepend domain-name-servers 8.8.8.8, 8.8.4.4;

Reinicie dhclient: $ sudo dhclient .

2. Modificando la configuración de Docker

Como se explica en los documentos :

Los sistemas que ejecutan Ubuntu o un derivado de Ubuntu en el escritorio generalmente usan 127.0.0.1 como el servidor de nombres predeterminado en el archivo /etc/resolv.conf.

Para especificar un servidor DNS para su uso por Docker:

 1. Log into Ubuntu as a user with sudo privileges. 2. Open the /etc/default/docker file for editing : $ sudo nano /etc/default/docker 3. Add the following setting for Docker. DOCKER_OPTS="--dns 8.8.8.8" 4. Save and close the file. 5. Restart the Docker daemon : $ sudo systemctl restart docker 

3. Usando un parámetro cuando ejecutas Docker

Cuando ejecute la ventana acoplable, simplemente agregue el siguiente parámetro: --dns 8.8.8.8

Tuve el mismo problema, me molestó por un tiempo y probé muchas soluciones en línea, pero fue en vano. Sin embargo finalmente lo resolví como sigue:

Corriendo:

 Ubuntu 16.04 docker Server 18.03.0-ce 
  1. Descubre la dirección de tu servidor DNS.

    Descubra la dirección de su servidor DNS ejecutando el siguiente comando:

     $: nmcli dev show | grep 'IP4.DNS' IP4.DNS[1]: 192.168.210.2 
  2. Actualizar el demonio Docker

    Cree un archivo de configuración de docker en /etc/docker/daemon.json. ( si aún no tiene uno ) y agregue el siguiente contenido al archivo:

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

    El primer elemento de la matriz es el servidor DNS de su red y el segundo es el servidor DNS de Google como alternativa cuando el DNS de su red no está disponible.

    Guarde el archivo y luego reinicie el servicio docker

     $: sudo service docker restart 

ok, reiniciar mi docker-machine está resolviendo el problema. gracias – ismailsunni

Esta fue la solución para mí:

 docker-machine restart  

Para mí, simplemente reiniciando demonio docker ayudó.

 service docker restart 

Para usuarios de Ubuntu

Necesitas agregar nuevas direcciones DNS en la configuración de la ventana acoplable.

 sudo nano /lib/systemd/system/docker.service 

Agregue el dns después de ExecStar.

 --dns 10.252.252.252 --dns 10.253.253.253 

Debería verse así:

 ExecStart=/usr/bin/dockerd -H fd:// --dns 10.252.252.252 --dns 10.253.253.253 

Entonces hazlo:

 systemctl daemon-reload sudo service docker restart 

Deberia trabajar.

Para mí, no pude instalar pip debido a que el DNS del docker no está configurado correctamente. He intentado los pasos anteriores, sin embargo, la configuración del DNS de la ventana acoplable al DNS de Google no funciona para mi computadora portátil. El DNS de Docker se puede configurar correctamente solo si configuro su DNS a la IP asignada de mi computadora portátil.

Si usa Ubuntu, puede usar los siguientes pasos para configurar el DNS de su docker:

  1. Averigua la IP asignada de tu dispositivo. Usted puede encontrar esto por cualquiera

    • Comprobando la dirección de entrada de su ethernet o wlan en ifconfig
    • Elegir cualquier dirección en nmcli dev show | grep 'DNS' nmcli dev show | grep 'DNS'
  2. Edite los dns en /etc/docker/daemon.json (cree este archivo si no existe anteriormente)

     { "dns": ["your_ip_in_step_1"] } 
  3. Reiniciar ventana acoplable: reinicio de la ventana sudo service docker restart

En mi caso, con la docker version 1.13.0 docker-machine 0.9.0 en Ubuntu 16.04 tuve que modificar ligeramente la respuesta de Tanzaho (2. Modificar la configuración de Docker) de la siguiente manera:

  1. Inicie sesión en Ubuntu como usuario con privilegios sudo.

  2. Abra el archivo / etc / default / docker para editarlo:

     sudo vim /etc/default/docker 
  3. Agregue la siguiente configuración para Docker.

     DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4" 
  4. Guarde y cierre el archivo.

  5. Reinicie el demonio Docker:

     sudo service docker restart 

Como novato de Docker, tuve un problema que se manifestaba de esta manera cuando estaba siguiendo el tutorial para Docker en:

https://docs.docker.com/get-started/part2

Estoy usando Docker 17.03.1-ce en una LAN corporativa.

Revisé y verifiqué mi configuración de DNS. Usé varias formas de configurar el DNS que encontré en mis búsquedas en Internet. Algunos causaron errores en el inicio. El enfoque en el que finalmente me decidí para configurar el DNS fue el de la sección Solución de problemas de Linux del enlace anterior arriba, donde el DNS se configura a través del archivo daemon.json en el directorio / etc / docker.

Sin embargo, todavía tenía este mismo problema. Lo que finalmente resolvió el problema para mí fue la configuración del proxy a través de las variables de entorno http_proxy y https_proxy . Los especifiqué en mi Dockerfile, pero no lo hice antes del comando RUN pip.

A pesar de que parecía ser un problema de DNS, mover estos comandos ENV antes del comando RUN marcó la diferencia para mí. En caso de que sea útil para cualquier persona con este problema.

No conozco la razón, pero el error significa que pip intenta resolver /simple/blinker/ como nombre de host DNS en lugar de la parte pypi.python.org , lo que parece muy extraño ya que no puedo encontrar ninguna URL. para lo que urlparse podría devolver una cadena como parte del nombre de host. Verificaría si hay algún problema con ~/.pip/pip.conf

Necesitaba agregar –network = host a mi comando de comstackción de la ventana acoplable:

 docker build --network=host -t image_name . 

Dejalo correr. A veces, Pypi está teniendo problemas de conexión que se ponen ruidosamente en tu cara para hacerte pensar que está roto. Solo para estar seguro, déjalo rodar, podrías encontrar que funciona por sí mismo.

El resultado final, a pesar de estas líneas de error rojas, es “Construido con éxito”

 $ docker build . Sending build context to Docker daemon 2.048 kB Step 1 : FROM docker-registry.aws.example.com:5000/cmcrc/python2:20160517120608 ---> 1e5034711aa9 Step 2 : RUN pip install prometheus-client requests ---> Running in f3c580fc93ae Collecting prometheus-client Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Retrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/ Downloading prometheus_client-0.0.13.tar.gz Collecting requests Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Retrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/ Downloading requests-2.10.0-py2.py3-none-any.whl (506kB) Building wheels for collected packages: prometheus-client Running setup.py bdist_wheel for prometheus-client: started Running setup.py bdist_wheel for prometheus-client: finished with status 'done' Stored in directory: /root/.cache/pip/wheels/04/94/f5/b803b2ff65e8344e99ca99b7f7cb8194224017167809a32b78 Successfully built prometheus-client Installing collected packages: prometheus-client, requests Successfully installed prometheus-client-0.0.13 requests-2.10.0 ---> 19c5e3cfe08f Removing intermediate container f3c580fc93ae Successfully built 19c5e3cfe08f 

Tuve el mismo problema. La causa del error es proxy.

Entonces, edito Dockerfile siguiendo

 RUN pip install -r /app/requirements.txt --proxy=http://user:pass@addr:port 

La configuración de la ventana acoplable DNS a Google DNS (8.8.8.8) o 10.0.0.2 no funcionó en el entorno de mi empresa.

En ejecución: $ drill @ 8.8.8.8 http://www.amazon.com o @ 10.0.0.2 confirmó esto.

Para encontrar un DNS que funcionara, ejecuté: $ drill http://www.amazon.com y me dio el IP de DNS que se está usando en mi red.

Luego lo puse en Ubuntu usando el siguiente paso para configurar el DNS del docker.

Se cambió dns en /etc/docker/daemon.json

 { "dns": ["the DNS ip from step1"] } Restart docker: sudo service docker restart 

Soy nuevo en Docker y probé todos los métodos mencionados aquí, pero aún así no lo hice bien. la versión de Docker era 18, y la versión de ubuntu era 16. Intenté este método: – Primero construí la ventana acoplable con la red de Internet de la compañía. esta red está bloqueando algunos sitios o cómo las cosas no fueron bien aquí. Entonces, en segundo lugar, me conecté a mi propia red (que estoy usando en un teléfono móvil, por ejemplo) y probé. las cosas salieron bien Requisito.txt se instaló con éxito, y se construyó la ventana acoplable.

Para mí, fue causado por estar conectado a la VPN de mi universidad. Desconectando “resuelto” el problema.