Is it possible to answer dialog questions when installing under docker?
Is it possible to somehow answer the questions that are presented as dialogs when installing some packages using apt-get?
For instance I'm trying to setup a container containing the mail-stack-delivery
package with:
FROM ubuntu
RUN apt-get install -y mail-stack-delivery
However that dockerfile generates dozens of errors when built that are along the lines of:
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:
From what I understand I just simply can't respond to the dialogs, but is there some way that I can pass a parameter to answer each question in advance? I know that it's just changing some configurations, so I could do it after the fact, but presumably it's better to let the install scripts do it so everything gets set properly.
Solution 1:
See the discussion here: https://github.com/docker/docker/issues/4032. In short, setting ENV DEBIAN_FRONTEND noninteractive
is not recommended as it persists in the final image, even when running something like docker run -i -t ... bash
. Therefore it is recommended either to omit DEBIAN_FRONTEND
and live with the warning, or specify it explicitly for each command e.g. RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q package
.
Fortunately, the new ARG
directive sets variables that only live during the build so a more elegant solution is now possible that's specified in the DockerFile
yet does not persist in the final image: ARG DEBIAN_FRONTEND=noninteractive
.
Solution 2:
You should set DEBIAN_FRONTEND=noninteractive as an envvar. In most cases this will at least make it so the installation doesn't error out.
Also as @Azdle mentioned, using debconf-set-selections will let you set specific items.
Solution 3:
As usual, a little more searching found the answer.
The answer is debconf-set-selections
. Manpage: http://manpages.ubuntu.com/manpages/oneiric/en/man1/debconf-set-selections.1.html
To find the options that can be set use debconf-get-selections
on a system that already has the package installed. You'll need to install debconf-utils
for the second command.
Solution 4:
This is working solution:
ARG DEBIAN_FRONTEND=noninteractive
Solution 5:
ENV DEBIAN_FRONTEND noninteractive
didn't work for me
neither did ARG DEBIAN_FRONTEND=noninteractive
but
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
did