152 votes

Docker : Problèmes d'installation d'apt-utils

J'essaie d'installer apt-utils sur Docker parce que quand je faisais juste apt-get update j'ai eu l'erreur suivante : debconf: delaying package configuration, since apt-utils is not installed . J'ai donc ajouté une ligne pour installer apt-utils (avec curl ) :

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

Mais, je reçois toujours cette erreur, ce qui me laisse penser que ma commande n'a pas fonctionné. Voici ce que j'obtiens lorsque j'essaie de construire l'image.

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

Quelle est la cause de ce problème et comment puis-je le résoudre ? Merci.

164voto

Leo K Points 2856

Il ne s'agit pas d'une erreur et il est possible de l'ignorer. J'ai construit un grand nombre d'images de conteneurs sans qu'apt-utils ne soit présent sur aucune d'entre elles et, malgré ce message d'avertissement, toutes les installations de paquets ont été effectuées et ont fonctionné normalement.

Quoi qu'il en soit, si vous voulez avoir apt-utils - installez-le. Il vous donnera cet avertissement une fois et il disparaîtra lors des prochaines invocations d'apt-get (comme vous pouvez le voir dans votre propre journal), curl a été installé sans ce message).

NOTE : si vous installez apt-utils, vous obtiendrez d'autres avertissements (parce que maintenant l'installateur peut exécuter une configuration interactive et tentera cela et échouera). Pour les supprimer et avoir les paquets qui ont une configuration interactive avec leurs valeurs par défaut, exécutez apt-get comme ceci DEBIAN_FRONTEND=noninteractive apt-get install -y pkgs....

18 votes

Pouvez-vous fournir une référence pour le commentaire "il est prudent de l'ignorer" ?

23 votes

Il s'agit d'un avertissement connu, voir par exemple ici : github.com/phusion/baseimage-docker/issues/ (cela se produit avec les paquets qui ont une configuration interactive où l'on vous pose des questions - cela signifie que la configuration interactive est ignorée, mais vous n'en avez même pas besoin et vous voulez les valeurs par défaut de toute façon, parce que vous exécutez une installation automatique).

3 votes

Ce n'est pas toujours un avertissement ignorable, cela dépend du paquet spécifique que vous installez. Parfois, la configuration est nécessaire et vous devrez soit faire une installation interactive, soit trouver un autre moyen de lui fournir la configuration dont il a besoin.

62voto

KeyMaker00 Points 1174

Après avoir fait des recherches sur Internet, j'ai trouvé quelques alternatives qui valent la peine d'être mentionnées, au lieu de mettre à chaque fois des mots. DEBIAN_FRONTEND=noninteractive devant apt-get install -y {your-pkgs} :

Alternative 1 : ARG DEBIAN_FRONTEND=noninteractif

L'instruction ARG définit une variable que les utilisateurs peuvent passer au moment de la construction à l'aide de la commande docker build en utilisant la commande de construction docker. au moment de la construction au constructeur avec la commande docker build en utilisant l'option --build-arg =. (Référence : [ 6 ])

Caractéristiques de la solution :

  • ARG est définie uniquement pendant la construction
  • L'option "non interactif" est définie comme valeur par défaut pour le moment de la construction uniquement.
  • Comme il s'agit d'un argument, il peut être modifié en passant une autre valeur pour cet argument avec par exemple docker build --build-arg DEBIAN_FRONTEND=newt

Exemple :

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

Alternative 2 : à la volée

C'est la solution de Leo K.

Caractéristiques de la solution :

  • Il peut être placé là où il est nécessaire. Il s'agit donc d'une bonne solution à granularité fine.
  • Il peut être défini dans une valeur différente dans une commande spécifique, il n'est donc pas défini de manière globale.
  • Le champ d'application est le RUN et n'affectera pas les autres directives.

Exemple :

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

Alternative 3 : ENV DEBIAN_FRONTEND=non interactif

Réglage de ENV DEBIAN_FRONTEND noninteractive serait également une alternative mais elle est fortement déconseillée.

Une autre solution serait de le définir au début et de le supprimer à la fin du fichier Docker.

Caractéristiques de la solution :

  • ENV fera persister la variable d'environnement après la construction (non recommandé), de plus, la directive
  • Il peut être source d'erreurs si vous oubliez de le remettre à la valeur par défaut.
  • Parce qu'il est fixé avec ENV il sera hérité par toutes les images et conteneurs construits à partir de l'image, changeant ainsi leur comportement. (Comme mentionné dans [ 1 ]) Les personnes utilisant ces images rencontrent des problèmes lors de l'installation interactive de logiciels, car les installateurs n'affichent aucune boîte de dialogue.
  • Le frontal par défaut est DEBIAN_FRONTEND=newt (voir [ 2 ], il doit donc être défini à la fin du fichier.

Exemple :

# 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

Alternative 4 : RUN export DEBIAN_FRONTEND=noninteractive

Caractéristiques de la solution :

  • Assez similaire à la alternative 2
  • En découplant, on souffre de la cohésion : pourquoi il y a un export de cette variable et à quoi elle appartient (apt-get).
  • Le champ d'application est le RUN et n'affectera pas les autres directives.

Exemple :

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

Plus à lire (références)

2 votes

J'ai utilisé "Alternative 2 : On-the-fly" : très propre et pratique, je n'ai plus d'avertissements déroutants.

2 votes

Je choisis l'alternative 1 et je reçois toujours des avertissements. Mon Dockerfile commence par FROM node:10.16.2 WORKDIR /usr/src/app ARG DEBIAN_FRONTEND=noninteractive et je cours docker build --no-cache -t node-10-16-2-plus-chrome .

0 votes

Attention, l'alternative 1 ne fonctionnera pas ! En effet, les args de construction ne sont interprétés dans le Dockerfile que lorsqu'ils sont référencés avec le signe dollar. Les args de construction ne sont pas les mêmes que les variables d'environnement, et les args ne seront pas propagés à la couche d'exécution (contrairement aux variables d'environnement).

1voto

Ray Points 67

Il s'agit d'un problème permanent sans grande solution... la meilleure option actuelle est la suivante :

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y apt-utils 2>&1 | \
    grep -v "^debconf: delaying package configuration, since apt-utils.*"

Explication :

  • grep -v les correspondances inversées, les lignes commençant par that seront supprimées !
  • ARG est la nouvelle ENV si vous n'en avez pas besoin au moment de l'exécution.
  • Nous pouvons alors utiliser apt-get toute la journée sans que cette erreur apparaisse lors de la construction de l'image à partir de zéro.

La preuve que ça marche : https://asciinema.org/a/WJCDEYcxCIy6EF7eXw0MAnK3c

0 votes

Ce n'est pas un correctif ou une "meilleure option". Vous ne faites que filtrer visuellement l'erreur, encombrant ainsi votre fichier Docker pour des raisons purement esthétiques.

0 votes

@dfherr Par meilleure option, je ne voulais pas dire bonne. Je l'ai remplacé par "sous-optimal" pour clarifier. Cela reconnaît et écarte l'avertissement. C'est fonctionnel puisque vous récupérez l'état réel et améliore l'accessibilité des erreurs sérieuses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X