Est-il possible de répondre aux questions du dialog lors de l’installation sous docker?

Est-il possible de répondre d’une manière ou d’une autre aux questions présentées comme des dialogs lors de l’installation de certains packages à l’aide de apt-get?

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

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

Cependant, dockerfile génère des dizaines d’erreurs lorsqu’elles sont construites et qui sont:

 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 j’ai compris, je ne peux tout simplement pas répondre aux dialogs, mais existe-t-il un moyen de passer un paramètre pour répondre à chaque question à l’avance? Je sais que cela ne fait que changer certaines configurations, donc je pourrais le faire après coup, mais je suppose que c’est mieux de laisser les scripts d’installation le faire pour que tout soit réglé correctement.

Voir la discussion ici: https://github.com/docker/docker/issues/4032 . En bref, ENV DEBIAN_FRONTEND noninteractive est déconseillé de définir ENV DEBIAN_FRONTEND noninteractive car il persiste dans l’image finale, même en exécutant quelque chose comme 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 les variables qui ne vivent que pendant la construction, de sorte qu’une solution plus élégante est maintenant possible, mais que celle spécifiée dans DockerFile ne persiste pas dans l’image finale: ARG DEBIAN_FRONTEND=noninteractive .

Vous devez définir DEBIAN_FRONTEND = non interactif en tant que envvar. Dans la plupart des cas, cela permettra au moins que l’installation ne génère pas d’erreur.

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

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

Ceci est la solution de travail:

ARG DEBIAN_FRONTEND = non interactif

ENV DEBIAN_FRONTEND noninteractive n’a pas fonctionné pour moi

ARG DEBIAN_FRONTEND=noninteractive

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