Ist es möglich, Dialogfragen bei der Installation unter Docker zu beantworten?

77

Ist es möglich, die Fragen, die bei der Installation einiger Pakete mit apt-get als Dialoge angezeigt werden, irgendwie zu beantworten?

Zum Beispiel versuche ich, einen Container einzurichten, der das mail-stack-deliveryPaket enthält mit:

FROM ubuntu

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

Diese Docker-Datei generiert jedoch beim Erstellen Dutzende von Fehlern, die wie folgt aussehen:

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: 

Soweit ich weiß, kann ich einfach nicht auf die Dialoge antworten, aber gibt es eine Möglichkeit, einen Parameter zu übergeben, um jede Frage im Voraus zu beantworten? Ich weiß, dass es nur einige Konfigurationen ändert, damit ich es nachträglich tun kann, aber vermutlich ist es besser, die Installationsskripte dies tun zu lassen, damit alles richtig eingestellt wird.

Azdle
quelle

Antworten:

78

Siehe die Diskussion hier: https://github.com/docker/docker/issues/4032 . Kurz gesagt, die Einstellung ENV DEBIAN_FRONTEND noninteractivewird nicht empfohlen, da sie im endgültigen Bild erhalten bleibt, selbst wenn so etwas ausgeführt wird docker run -i -t ... bash. Daher wird empfohlen, DEBIAN_FRONTENDdie Warnung entweder wegzulassen und damit zu leben oder sie für jeden Befehl explizit anzugeben, z RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q package.

Glücklicherweise ARGlegt die neue Direktive Variablen fest, die nur während des Builds aktiv sind, sodass jetzt eine elegantere Lösung möglich ist, die DockerFileim endgültigen Bild angegeben ist und im endgültigen Image nicht bestehen bleibt : ARG DEBIAN_FRONTEND=noninteractive.

Ohad Schneider
quelle
Ich hatte eine RUN apt-get -y -qq install python-pip php-mbstring php-bcmath, die das Erstellen meiner Docker-Datei an einer Eingabeaufforderung mit der Meldung stoppte A new version (/usr/lib/php/7.0/php.ini-production.cli) of configuration file /etc/php/7.0/cli/php.ini is available, but the version installed currently has been locally modified.... What do you want to do about modified configuration file php.ini... 1. install the new version, 2. keep the local version.... Durch Hinzufügen dieser Umgebung wurde die Eingabeaufforderung
außer
26

Sie sollten DEBIAN_FRONTEND = nicht interaktiv als envvar festlegen. In den meisten Fällen wird dies zumindest dazu führen, dass bei der Installation keine Fehler auftreten.

Wie bereits bei @Azdle erwähnt, können Sie mit debconf-set-selections bestimmte Elemente festlegen.

cpuguy83
quelle
7

Dies ist eine funktionierende Lösung:

ARG DEBIAN_FRONTEND = nicht interaktiv

Vovandos
quelle
4
Könnten Sie bitte Ihre Antwort erklären? Zum Beispiel, warum es funktioniert, was das Problem war usw.
Leander Moesinger
1
Sicher. Ich hatte das gleiche Problem. Ich habe versucht, "RUN DEBIAN_FRONTEND = nicht interaktive apt-get-Installation" hinzuzufügen, aber den gleichen Fehler erhalten. Wenn ich allen apt-get-Befehlen "RUN DEBIAN_FRONTEND = noninteractive" hinzufüge, funktioniert dies einwandfrei. Danach habe ich "ARG DEBIAN_FRONTEND = noninteractive" hinzugefügt und es funktioniert wie ein Zauber! Entschuldigung für meine Antwort, ich bin Neuling hier. Ich kann es löschen :)
Vovandos
1
Eine gute Antwort behebt nicht nur das Problem, sondern erklärt auch die Gründe dafür. Schauen Sie sich zum Beispiel die akzeptierte Antwort an. Ich schlage daher vor, dass Sie Ihre Antwort entweder stark bearbeiten und Hintergrundinformationen darüber hinzufügen, warum diese Befehle funktionieren, oder sie löschen. Ich weiß, dass Sie es gut gemeint haben - aber letztendlich wollen wir einen hohen Standard beibehalten.
Leander Moesinger
4

ENV DEBIAN_FRONTEND noninteractive hat bei mir nicht funktioniert

auch nicht ARG DEBIAN_FRONTEND=noninteractive

aber RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selectionstat

ishandutta2007
quelle
3

BEISPIEL Mit Erfolg:

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