Is it possible to answer dialog questions when installing under docker?
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
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
Solution 5
This is working solution:
ARG DEBIAN_FRONTEND=noninteractive
azdle
Updated on February 07, 2022Comments
-
azdle over 2 years
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.
-
Shadi over 7 yearsI had a
RUN apt-get -y -qq install python-pip php-mbstring php-bcmath
that was stopping the building of my dockerfile at a prompt with messageA 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
.... Adding this env var ommitted the prompt -
Leander Moesinger almost 7 yearsCould you please explain your answer? Like why it works, what was the problem etc.
-
vovandos almost 7 yearsSure. I had the same problem. I tried to add "RUN DEBIAN_FRONTEND=noninteractive apt-get install", but received the same error. If I add "RUN DEBIAN_FRONTEND=noninteractive" to all apt-get commands, then it works fine. After that I added "ARG DEBIAN_FRONTEND=noninteractive" and it works like a charm! Sorry for my answer, I am newbie here. I can delete it :)
-
Leander Moesinger almost 7 yearsA good answer does not just fix the problem but also explain the reasoning behind it. For example look at the accepted answer. So I suggest you either edit your answer heavily and include some background information about why those commands work or you delete it. I know you meant good - but ultimately we want to keep a high standard.
-
questionto42standswithUkraine about 3 yearsDownvote. This solution has already been mentioned in the last part of the accepted answer a year before.