it-swarm.com.de

Kann man bei der Installation unter Docker Dialogfragen beantworten?

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 mit dem mail-stack-delivery-Paket einzurichten:

FROM ubuntu

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

Diese Docker-Datei erzeugt jedoch Dutzende von Fehlern, wenn sie erstellt werden, die den folgenden Linien folgen:

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: 

Nach dem, was ich verstehe, kann ich einfach nicht auf die Dialoge antworten, aber gibt es eine Möglichkeit, einen Parameter zu übergeben, um jede Frage vorher zu beantworten? Ich weiß, dass es nur einige Konfigurationen ändert, also könnte ich es nachträglich tun, aber vermutlich ist es besser, wenn die Installationsskripten das tun, damit alles richtig eingestellt ist.

64
Azdle

Sehen Sie sich die Diskussion hier an: https://github.com/docker/docker/issues/4032 . Kurz gesagt, die Einstellung von ENV DEBIAN_FRONTEND noninteractive wird nicht empfohlen, da sie im endgültigen Bild bestehen bleibt, auch wenn etwas wie docker run -i -t ... bash ausgeführt wird. Daher wird empfohlen, entweder DEBIAN_FRONTEND wegzulassen und mit der Warnung zu leben, oder sie explizit für jeden Befehl anzugeben, z. RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q package

Glücklicherweise setzt die neue Anweisung ARG Variablen, die nur während des Builds verfügbar sind. Eine elegantere Lösung, die in der Variablen DockerFile angegeben ist, ist jetzt möglich, bleibt jedoch im endgültigen Bild nicht erhalten: ARG DEBIAN_FRONTEND=noninteractive.

60
Ohad Schneider

Sie sollten DEBIAN_FRONTEND = nicht interaktiv als eine Umgebungsvariable festlegen. In den meisten Fällen wird dies zumindest dazu führen, dass die Installation nicht fehlerfrei ist.

Wie auch bei @Azdle erwähnt, können Sie mit der Auswahl von debconf-set bestimmte Elemente festlegen.

25
cpuguy83

Wie üblich fand ein wenig mehr Suche die Antwort.

Die Antwort lautet debconf-set-selections. Manpage: http://manpages.ubuntu.com/manpages/oneiric/de/man1/debconf-set-selections.1.html

Um die einstellbaren Optionen zu finden, verwenden Sie debconf-get-selections auf einem System, auf dem das Paket bereits installiert ist. Für den zweiten Befehl müssen Sie debconf-utils installieren.

13
Azdle

Dies ist eine funktionierende Lösung:

ARG DEBIAN_FRONTEND = nicht interaktiv

5
vovandos

ENV DEBIAN_FRONTEND noninteractive hat bei mir nicht funktioniert

ARG DEBIAN_FRONTEND=noninteractive auch nicht 

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

2
ishandutta2007

BEISPIEL mit Erfolg:

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