web-dev-qa-db-fra.com

Est-il possible de répondre aux questions de dialogue lors de l'installation sous docker?

Est-il possible de répondre aux questions présentées sous forme de boîtes de dialogue lors de l'installation de paquets avec apt-get?

Par exemple, j'essaie de configurer un conteneur contenant le paquetage mail-stack-delivery avec:

FROM ubuntu

RUN apt-get install -y mail-stack-delivery

Cependant, ce fichier de docker génère des dizaines d’erreurs lorsqu’il est construit, dans la lignée de:

debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can't locate Term/ReadLine.pm in @INC (@INC contains: /etc/Perl /usr/local/lib/Perl/5.14.2 /usr/local/share/Perl/5.14.2 /usr/lib/Perl5 /usr/share/Perl5 /usr/lib/Perl/5.14 /usr/share/Perl/5.14 /usr/local/lib/site_Perl .) at /usr/share/Perl5/Debconf/FrontEnd/Readline.pm line 7, <> line 11.)
debconf: falling back to frontend: Teletype
dpkg-preconfigure: unable to re-open stdin: 

D'après ce que je comprends, je ne peux tout simplement pas répondre aux dialogues, mais existe-t-il un moyen de passer un paramètre pour répondre à chaque question à l'avance? Je sais qu'il ne s'agit que de modifier certaines configurations. Je peux donc le faire après coup, mais il est probablement préférable de laisser les scripts d'installation le faire pour que tout soit correctement configuré.

64
Azdle

Voir la discussion ici: https://github.com/docker/docker/issues/4032 . En bref, il est déconseillé de définir ENV DEBIAN_FRONTEND noninteractive car il persiste dans l'image finale, même lorsque vous exécutez une opération telle que docker run -i -t ... bash. Par conséquent, il est recommandé d'omettre DEBIAN_FRONTEND et de vivre avec l'avertissement, ou de le spécifier explicitement pour chaque commande, par exemple. RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q package

Heureusement, la nouvelle directive ARG définit des variables qui ne vivent que pendant la construction, de sorte qu'une solution plus élégante, spécifiée dans la variable DockerFile, ne subsiste pas dans l'image finale: ARG DEBIAN_FRONTEND=noninteractive.

60
Ohad Schneider

Vous devez définir DEBIAN_FRONTEND = noninteractive en tant que variable d'env. Dans la plupart des cas, cela permettra au moins que l'installation ne soit pas erronée.

Comme mentionné également par @Azdle, l’utilisation de debconf-set-selections vous permettra de définir des éléments spécifiques.

25
cpuguy83

Comme d'habitude, un peu plus de recherche a trouvé la réponse.

La réponse est debconf-set-selections. Manpage: http://manpages.ubuntu.com/manpages/oneiric/en/man1/debconf-set-selections.1.html

Pour rechercher les options pouvant être définies, utilisez debconf-get-selections sur un système sur lequel le package est déjà installé. Vous devrez installer debconf-utils pour la deuxième commande.

13
Azdle

C'est la solution de travail:

ARG DEBIAN_FRONTEND = non interactif

5
vovandos

ENV DEBIAN_FRONTEND noninteractive n'a pas fonctionné pour moi

ARG DEBIAN_FRONTEND=noninteractive non plus 

mais RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections l'a fait

2
ishandutta2007

Exemple avec succès:

echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
Sudo apt-get install -y -q <package name>
0
DINESH RATHEE