Wenn Sie von Dockerfile aus erstellen, darf das Debian / Ubuntu-Paket debconf nicht interaktiv installiert werden

29

Ich habe die folgende Umgebung so eingestellt, dass während der Installation von apt-get keine Frage / kein Dialog gestellt wird:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

Welches ist gleichbedeutend mit:

export DEBIAN_FRONTEND="noninteractive"

Wenn Sie jedoch ein Image aus einer Docker-Datei erstellen, sagt debconf am Ende einer bestimmten Debian / Ubuntu-Paketinstallation (unter Verwendung von apt-get install):

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.

Wow ... ich habe meinen Fehler gefunden. Es gibt keine Möglichkeit, Kommentare in ENV-Zeilen in Dockerfile einzufügen. Ich werde mich selbst antworten, da ich mir sicher bin, dass dies einige andere Menschen beißen wird ...

Phil L.
quelle

Antworten:

57

Es sollte aktiv davon abgeraten werden , das DEBIAN_FRONTENDauf noninteractiveVia zu setzen ENV. Der Grund dafür ist, dass die Umgebungsvariable nach dem Build erhalten bleibt, z docker exec -it ... bash. B. beim Ausführen . Die Einstellung wäre hier nicht sinnvoll.

Es gibt zwei weitere Möglichkeiten:

  1. Stellen Sie es über ein, ARGda dies nur während des Builds verfügbar ist:

    ARG DEBIAN_FRONTEND=noninteractive
    RUN apt-get -qq install {your-package}
    
  2. Stellen Sie es bei Bedarf sofort ein.

    RUN apt-get update && \
        DEBIAN_FRONTEND=noninteractive apt-get -qq install {your-package}
    
k0pernikus
quelle
8
hat sich
registriert,
@ AndréWerlang: Ich auch!
gvgramazio
27

Ok, die Ursache des Problems war: Sie können # nicht verwenden, um Kommentare zu ENV-Zeilen in Dockerfiles zu schreiben, da es keinen Begrenzer gibt, der "end of env variable" sagt Variable.

dh mit der Dockerfile-Zeile:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

Die Variable:

DEBIAN_FRONTEND

wird genau diese ganze Zeile enthalten:

noninteractive    # export DEBIAN_FRONTEND="noninteractive"

und ist gleichbedeutend mit:

export DEBIAN_FRONTEND='noninteractive    # export DEBIAN_FRONTEND="noninteractive"'

Ich habe meine Frage fast abgebrochen, aber mit Suchmaschinen und Stack Exchange werden einige Leute hier eines Tages wahrscheinlich ihren Fehler finden ;-)

Phil L.
quelle
5
Wenn dies die eigentliche Antwort ist, sollten Sie sie als solche akzeptieren, damit die Frage nicht mehr als unbeantwortet aufgeführt wird.
Andy Shinn
4
Es wird davon abgeraten, ENVfür zu verwenden DEBIAN_FRONTEND, siehe: github.com/docker/docker/issues/4032
k0pernikus