Docker: tiene problemas para instalar apt-utils


109

Estoy tratando de instalar apt-utilsen acoplable porque cuando yo estaba haciendo apt-get update, estaba consiguiendo el error: debconf: delaying package configuration, since apt-utils is not installed. Así que agregué una línea para instalar apt-utils(junto con curl):

RUN apt-get update && apt-get install -y apt-utils && apt-get install -y curl

Pero sigo recibiendo ese error que me lleva a creer que mi comando no funcionó. A continuación se muestra mi salida cuando trato de construir la imagen.

Step 5/12 : RUN apt-get update && apt-get install -y apt-utils && apt-get install -y curl
 ---> Running in 6e6565ff01bd
Get:1 http://security.debian.org jessie/updates InRelease [94.4 kB]
Ign http://deb.debian.org jessie InRelease
Get:2 http://deb.debian.org jessie-updates InRelease [145 kB]
Get:3 http://deb.debian.org jessie Release.gpg [2420 B]
Get:4 http://deb.debian.org jessie Release [148 kB]
Get:5 http://security.debian.org jessie/updates/main amd64 Packages [624 kB]
Get:6 http://deb.debian.org jessie-updates/main amd64 Packages [23.0 kB]
Get:7 http://deb.debian.org jessie/main amd64 Packages [9098 kB]
Fetched 10.1 MB in 6s (1541 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
  libapt-inst1.5
The following NEW packages will be installed:
  apt-utils libapt-inst1.5
0 upgraded, 2 newly installed, 0 to remove and 24 not upgraded.
Need to get 537 kB of archives.
After this operation, 1333 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian/ jessie/main libapt-inst1.5 amd64 1.0.9.8.4 [169 kB]
Get:2 http://deb.debian.org/debian/ jessie/main apt-utils amd64 1.0.9.8.4 [368 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 537 kB in 0s (557 kB/s)
Selecting previously unselected package libapt-inst1.5:amd64.
(Reading database ... 21676 files and directories currently installed.)
Preparing to unpack .../libapt-inst1.5_1.0.9.8.4_amd64.deb ...
Unpacking libapt-inst1.5:amd64 (1.0.9.8.4) ...
Selecting previously unselected package apt-utils.
Preparing to unpack .../apt-utils_1.0.9.8.4_amd64.deb ...
Unpacking apt-utils (1.0.9.8.4) ...
Setting up libapt-inst1.5:amd64 (1.0.9.8.4) ...
Setting up apt-utils (1.0.9.8.4) ...
Processing triggers for libc-bin (2.19-18+deb8u10) ...
Reading package lists...
Building dependency tree...
Reading state information...
curl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.
Removing intermediate container 6e6565ff01bd
 ---> f65e29c6a6b9
Step 6/12 : RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
 ---> Running in f5764ba56103
Detected operating system as debian/8.
Checking for curl...
Detected curl...
Checking for gpg...
Detected gpg...
Running apt-get update... done.
Installing debian-archive-keyring which is needed for installing
apt-transport-https on many Debian systems.
Installing apt-transport-https... done.
Installing /etc/apt/sources.list.d/github_git-lfs.list...done.
Importing packagecloud gpg key... done.
Running apt-get update... done.

The repository is setup! You can now install packages.
Removing intermediate container f5764ba56103
 ---> a4e64687ab73

¿Qué está causando esto y cómo puedo solucionarlo? ¡Gracias!

Respuestas:


105

En realidad, esto no es un error y es seguro ignorarlo. He creado una gran cantidad de imágenes de contenedor sin tener apt-utils en ninguna de ellas y, independientemente de este mensaje de advertencia, todas las instalaciones de paquetes se realizan y funcionan normalmente.

De todos modos, si desea tener apt-utils, instálelo. Le dará esta advertencia una vez y luego desaparecerá para futuras invocaciones de apt-get (como puede ver en su propio registro, curlse instaló sin ese mensaje).

NOTA si instala apt-utils, recibirá otras advertencias (porque ahora el instalador puede ejecutar una configuración interactiva y lo intentará sin éxito). Para suprimirlos y tener paquetes que tengan una configuración interactiva con sus valores predeterminados, ejecute apt-get asíDEBIAN_FRONTEND=noninteractive apt-get install -y pkgs....


11
¿Puede proporcionar una referencia para el comentario "es seguro ignorarlo"?
— Zak

19
Es una advertencia conocida, vea por ejemplo aquí: github.com/phusion/baseimage-docker/issues/… (esto sucede con paquetes que tienen una configuración interactiva donde le hace preguntas; significa que se omite la configuración interactiva, pero no ni siquiera lo necesito y quiere los valores predeterminados de todos modos, porque está ejecutando una instalación automática).
— Leo K

No siempre es una advertencia ignorable, depende del paquete específico que esté instalando. A veces, la configuración es necesaria y tendrá que realizar una instalación interactiva o buscar alguna otra forma de proporcionarle la configuración que necesita.
— Ken Williams

44

Después de buscar en Internet, he encontrado algunas alternativas que vale la pena mencionar, en lugar de poner siempre DEBIAN_FRONTEND=noninteractivedelante de apt-get install -y {your-pkgs}:

Alternativa 1: ARG DEBIAN_FRONTEND = no interactivo

La instrucción ARG define una variable que los usuarios pueden pasar al constructor en el momento de la compilación con el comando docker build usando el indicador --build-arg =. (Referencia: [ 6 ])

Características de la solución:

  • ARG la directiva se establece solo durante la compilación
  • La opción 'no interactiva' se establece como valor predeterminado solo para el tiempo de compilación.
  • Dado que es un argumento, se puede cambiar pasando otro valor para este argumento con, por ejemplo, docker build --build-arg DEBIAN_FRONTEND=newt

Ejemplo:

ARG DEBIAN_FRONTEND=noninteractive
...
RUN apt-get -yq install {your-pkgs}

Alternativa 2: sobre la marcha

Es la solución de Leo K.

Características de la solución:

  • Se puede configurar donde se necesite. Así que una buena solución de grano fino.
  • Se puede configurar en un valor diferente en un comando específico, por lo que no se configura globalmente.
  • El alcance es el RUNy no afectará a otras directivas.

Ejemplo:

RUN DEBIAN_FRONTEND=noninteractive apt-get -yq install {your-pkgs}

Alternativa 3: ENV DEBIAN_FRONTEND = no interactivo

El entorno ENV DEBIAN_FRONTEND noninteractivetambién sería una alternativa, pero se desaconseja mucho.

Otra forma sería establecerlo al principio y desarmarlo al final del Dockerfile.

Características de la solución:

  • ENV La directiva conservará la variable de entorno después de la compilación (no recomendado), además
  • Puede ser propenso a errores si olvida volver a establecerlo en el valor predeterminado.
  • Debido a que está configurado con ENV, será heredado por todas las imágenes y contiene contenido construido a partir de la imagen, cambiando efectivamente su comportamiento. (Como se menciona en [ 1 ]) Las personas que utilizan esas imágenes tienen problemas al instalar software de forma interactiva, porque los instaladores no muestran cuadros de diálogo.
  • La interfaz predeterminada es DEBIAN_FRONTEND=newt(consulte [ 2 ], por lo que debe establecerse al final del archivo.

Ejemplo:

# Set for all apt-get install, must be at the very beginning of the Dockerfile.
ENV DEBIAN_FRONTEND noninteractive
...
# Non-interactive modes get set back.
ENV DEBIAN_FRONTEND newt

Alternativa 4: EJECUTAR la exportación DEBIAN_FRONTEND = no interactivo

Características de la solución:

  • Bastante similar a la alternativa 2
  • Al desacoplarse, la cohesión está sufriendo: por qué hay una exportación de esta variable y a qué pertenece (apt-get).
  • El alcance es el RUNy no afectará a otras directivas.

Ejemplo:

# Set the frontend and then install your package
RUN export DEBIAN_FRONTEND=noninteractive && \
    ...
    apt-get -yq install {your-pkgs} && \
    ...

Más para leer (referencias)


2
Usé "Alternativa 2: sobre la marcha": muy limpio y conveniente, ya no tengo advertencias confusas
— herve-guerin

Elijo la Alternativa 1 y sigo recibiendo advertencias. Mi Dockerfile comienza con FROM node:10.16.2 WORKDIR /usr/src/app ARG DEBIAN_FRONTEND=noninteractivey lo ejecutodocker build --no-cache -t node-10-16-2-plus-chrome .
— Marecky
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.