No se pueden instalar paquetes dentro de la imagen de Docker Ubuntu

289

Instalé la imagen de Ubuntu 14.04 en la ventana acoplable. Después de eso, cuando intento instalar paquetes dentro de la imagen de ubuntu, no puedo encontrar el error del paquete:

apt-get install curl

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package curl

¿Cómo arreglar este error?

Desarrollador
fuente

Respuestas:

621

Es porque no hay caché de paquete en la imagen, debe ejecutar:

apt-get update

antes de instalar paquetes, y si su comando está en un Dockerfile, necesitará:

apt-get -y install curl

Para suprimir la salida estándar de un comando use -qq. P.ej

apt-get -qq -y install curl
ISanych
fuente
1
esto funciona para mí, ¿debería ejecutar -qq todo el tiempo
Desarrollador
66
-qq suprime la salida que generalmente no necesita en Dockerfile. Otro buen truco: dígale a debconf que está funcionando en un entorno no interactivo: echo 'debconf debconf / frontend select Noninteractive' | debconf-set-selections
ISanych
77
Por alguna razón, esto no funciona para mí, sigue siendo el mismo mensaje "E: No se puede encontrar el paquete ..."
tblancog
¡"apt-get-update" y "apt-get install curl" funcionaron bien!
Sindhu
Descubrí que este error también ocurre en la ventana acoplable cuando se queda sin espacio. Corrí docker image prunepara liberar espacio y eso me lo arregló.
Jonathan Rys
123

De los documentos en mayo2017 2018 2019 2020

Siempre combine RUN apt-get updatecon apt-get installen la misma RUNdeclaración, por ejemplo

RUN apt-get update && apt-get install -y package-bar

(...)

Usar apt-get updatesolo en una RUNdeclaración causa problemas de almacenamiento en caché y las apt-get installinstrucciones posteriores fallan.

(...)

El uso RUN apt-get update && apt-get install -yasegura que su Dockerfile instala las últimas versiones de paquete sin más codificación o intervención manual. Esta técnica se conoce como "almacenamiento en caché".

cremas
fuente
14

Agregue el siguiente comando en Dockerfile:

RUN apt-get update
Gourav Singla
fuente
4

Asegúrese de no tener errores de sintaxis en su Dockerfile, ya que esto también puede causar este error. Un ejemplo correcto es:

RUN apt-get update \
    && apt-get -y install curl \
    another-package

Fue una combinación de arreglar un error de sintaxis y agregar apt-get updateque resolvió el problema para mí.

Connor
fuente
1

Descubrí que montar un volumen local sobre / tmp puede causar problemas de permisos cuando se ejecuta "apt-get update", lo que evita que se llene el caché del paquete. Con suerte, esto no es algo que la mayoría de la gente hace, pero es algo más que debe buscar si ve este problema.

Groboclown
fuente
-3

Necesita actualizar la lista de paquetes en su Ubuntu:

$ sudo apt-get update
$ sudo apt-get install <package_name>
toro sin nombre
fuente