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!

peachykeen
fuente

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....

Leo K
fuente
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)

KeyMaker00
fuente
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