64

I've set the following environment so that no question/dialog is asked during apt-get install:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

Which is equivalent to:

export DEBIAN_FRONTEND="noninteractive"

Yet, when building an image from a Dockerfile, at the end of one specific Debian/Ubuntu package install (using apt-get install), package configuration debconf says:

debconf: unable to initialize frontend: Noninteractive    # export DEBIAN_FRONTEND="noninteractive"
debconf: (Bareword "Debconf::FrontEnd::Noninteractive" not allowed while "strict subs" in use at (eval 35) line 3, <> line 1.)
debconf: falling back to frontend: Noninteractive
Subroutine BEGIN redefined at (eval 36) line 2, <> line 1.
Phil L.
  • 1,085
  • 1
  • 8
  • 6

2 Answers2

136

It should be actively discouraged to set the DEBIAN_FRONTEND to noninteractive via ENV. The reason is that the environment variable persists after the build, e.g. when you run docker exec -it ... bash. The setting would not make sense here.

There are two other possible ways:

  1. Set it via ARG as this only is available during build:

    ARG DEBIAN_FRONTEND=noninteractive
    RUN apt-get -qq install {your-package}
    
  2. Set it on-the-fly when required.

    RUN apt-get update && \
        DEBIAN_FRONTEND=noninteractive apt-get -qq install {your-package}
    
k0pernikus
  • 4,170
  • 4
  • 17
  • 17
32

Ok, source of the problem was: you cannot use # to put comments on ENV lines in Dockerfiles because there's no delimiter to say "end of env variable", everything that is after variable name and the space immediately after is going to be in the variable.

i.e. with the Dockerfile line:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

The variable:

DEBIAN_FRONTEND

will contain exactly this whole line:

noninteractive    # export DEBIAN_FRONTEND="noninteractive"

and is equivalent to doing:

export DEBIAN_FRONTEND='noninteractive    # export DEBIAN_FRONTEND="noninteractive"'
Phil L.
  • 1,085
  • 1
  • 8
  • 6
  • 8
    If this is the actual answer you should accept it as such so the question is no longer listed as unanswered. – Andy Shinn Aug 12 '14 at 15:26
  • 6
    It is discouraged to use `ENV` for `DEBIAN_FRONTEND`, see: https://github.com/docker/docker/issues/4032 – k0pernikus Aug 17 '16 at 09:30