Estoy siguiendo la guía de fig para usar Docker con una aplicación de Python, pero cuando Docker llega al comando
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 el interior de un contenedor docker. ¿Debo hacer algo para permitirle 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 pip install
comando para cualquier paquete.
¿Alguien tiene alguna idea de lo que está pasando aquí?
docker run mycontainer pip install -r requirements.pip
fuera del contexto del higo? Aún así, parece que es un problema de versión pip. Para algunas versiones más nuevas de pip, necesita, así que especifique algunas opciones más de línea de comando cuando se ejecutepip install
para que encuentre ciertos paquetes.FROM python:2.7
por lo que será la versión de pip que venga con python 2.7.9. No he intentado ejecutar comandos pip por separado, pero eso se debe a que ni siquiera puedo hacer que el contenedor se compile ya que pip no funciona. Podría intentar hacer un contenedor de Python vacío y probarlo cuando tenga la oportunidadpip install --no-use-wheel --allow-all-external -r requirements.pip
o si eso no ayuda a intentarlopip install --no-use-wheel --allow-all-external --allow-unverified blinker -r requirements.pip
. Eso funcionó para mí en el pasado cuando tuve un error similar conpip install
. También puede intentar eliminar esa línea del DockerFile y luego construir el contenedor sin ella para probar si el comando se puede ejecutar posteriormente. Sin embargo, como dije, no creo que ese sea el problema aquí.Respuestas:
Su problema proviene del hecho de que Docker no está utilizando el servidor DNS adecuado. Puede solucionarlo de tres formas diferentes:
1. Agregar 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 que sea permanente:
$ sudo nano /etc/dhcp/dhclient.conf
Quite el comentario y edite la línea con el prefijo domain-name-server:prepend domain-name-servers 8.8.8.8, 8.8.4.4;
Reinicio dhclient:
$ sudo dhclient
.2. Modificación de la configuración de Docker
Como se explica en los documentos :
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. Usar un parámetro al ejecutar Docker
Cuando ejecute Docker, simplemente agregue el siguiente parámetro:
--dns 8.8.8.8
fuente
--dns
bandera está disponible solo en eldocker
comando. Todavía no puedo encontrar un equivalente para Docker-Compose.Necesitaba agregar --network = host a mi comando de compilación de docker:
fuente
Tuve el mismo problema y me atormentó por un tiempo y probé muchas soluciones en línea pero fue en vano. Sin embargo, finalmente lo resolví de la siguiente manera:
Corriendo:
Ubuntu 16.04 docker Server 18.03.0-ce
Descubra la dirección de su 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
Actualiza el demonio de 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 respaldo cuando el DNS de su red no está disponible.
Guarde el archivo y luego reinicie el servicio Docker.
fuente
docker-ce
. Nota: no tenía el archivodaemon.json
. Probablemente, ese archivo no se crea de forma predeterminada durante la instalación y debe crearlo manualmente.Esta fue la solución para mí:
fuente
docker-machine restart
y luegodocker-machine env
(como me lo había pedido) y solucionó el problema.Para mí, simplemente reiniciar el daemon de la ventana acoplable ayudó.
fuente
Para usuarios de Ubuntu
Debe agregar nuevas direcciones DNS en la configuración de la ventana acoplable
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:
Deberia trabajar.
fuente
16.04
, Docker17.03.1-ce
.16.04
Docker17.09.0-ce
y esto no funcionaEn mi caso, con
docker version 1.13.0
ydocker-machine 0.9.0
debajoUbuntu 16.04
tuve que modificar ligeramente la respuesta de Tanzaho (2. Modificar la configuración de Docker) de la siguiente manera:Inicie sesión en Ubuntu como usuario con privilegios de sudo.
Abra el archivo / etc / default / docker para editarlo:
Agregue la siguiente configuración para Docker.
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
Guarde y cierre el archivo.
Reinicie el demonio de Docker:
fuente
En caso de que alguien esté leyendo esto usando docker-compose. Logré resolver esto cambiando mi archivo yaml de la siguiente manera
version: 3.4 service: my-app build: context: . network: host
que es equivalente a escribir
fuente
Para mí, no pude instalar pip debido a que el DNS de la ventana acoplable no estaba configurado correctamente. Probé los pasos anteriores, sin embargo, la configuración de Docker DNS para Google DNS no funciona para mi computadora portátil. El DNS de Docker se puede configurar correctamente solo si configuro su DNS en la IP asignada de mi computadora portátil.
Si usa Ubuntu, puede seguir los siguientes pasos para configurar el DNS de su Docker:
Descubra la IP asignada a su dispositivo. Puede encontrar esto por
ifconfig
nmcli dev show | grep 'DNS'
Edite dns en
/etc/docker/daemon.json
(cree este archivo si no existe previamente){ "dns": ["your_ip_in_step_1"] }
Reinicie la ventana acoplable:
sudo service docker restart
fuente
Como novato de Docker, tuve un problema que se manifestó 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.
Verifiqué y verifiqué dos veces mi configuración de DNS. Usé varias formas de configurar el DNS que encontré en mis búsquedas en Internet. Algunos causaron errores al inicio. El enfoque que finalmente me decidí para configurar el DNS fue el de la sección Solucionar problemas de Linux del enlace anterior, donde el DNS se configura a través del archivo daemon.json en el directorio / etc / docker.
Sin embargo, todavía tenía el 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 tenía especificados en mi Dockerfile, pero no lo hice antes del comando RUN pip.
Aunque parecía ser un problema de DNS, mover estos comandos ENV por delante del comando RUN marcó la diferencia para mí. En caso de que sea útil para alguien con este problema.
fuente
No sé la razón, pero el error significa que pip está tratando de resolver el
/simple/blinker/
como un nombre de host DNS en lugar de lapypi.python.org
parte, lo que parece muy extraño ya que ni siquiera puedo encontrar una URL para la queurlparse
pueda devolver una cadena como un nombre de host parte. Verificaría si hay algún problema con~/.pip/pip.conf
fuente
Tuve el mismo problema La causa del error es el proxy.
Entonces, edito Dockerfile siguiendo
RUN pip install -r /app/requirements.txt --proxy=http://user:pass@addr:port
fuente
Para mí, fue causado por estar conectado a la VPN de mi universidad. Desconectar "solucionó" el problema.
fuente
La configuración de Docker DNS en 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 www.amazon.com o @ 10.0.0.2 confirmaron esto.
Para encontrar un DNS que funcionara, ejecuté: $ drill www.amazon.com y me dio la IP de DNS que se está utilizando en mi red.
Luego lo configuré en Ubuntu usando el siguiente paso para configurar el DNS de Docker.
DNS modificado en /etc/docker/daemon.json
{ "dns": ["the DNS ip from step1"] } Restart docker: sudo service docker restart
fuente
Soy nuevo en Docker y probé todos los métodos mencionados aquí, pero aún no lo hice bien. la versión de Docker era 18 y la versión de ubuntu era 16. Probé este método: - Primero estaba construyendo Docker con la red de Internet de la empresa. esta red está bloqueando algunos sitios o de alguna manera las cosas no fueron bien aquí. En segundo lugar, me conecté a mi propia red (que estoy usando en un teléfono móvil, por ejemplo) y lo intenté. las cosas salieron bien. Requirement.txt se instaló correctamente y se compiló Docker.
fuente
Déjalo correr. A veces, Pypi tiene problemas de conexión que se ponen ruidosamente en su cara para hacerle pensar que está roto. Solo para estar seguro, déjelo rodar, es posible que descubra que funciona por sí solo.
La conclusión, 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('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8610>: 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('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d87d0>: 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('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8990>: 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('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8b50>: 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('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8d10>: 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('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9d4d0>: 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('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9da10>: 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('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9dc50>: 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('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9de10>: 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('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9dfd0>: 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
fuente