Quando si costruisce da Dockerfile, l'installazione del pacchetto Debian / Ubuntu non è consentita l'installazione non interattiva di debconf


29

Ho impostato il seguente ambiente in modo che nessuna domanda / finestra di dialogo venga posta durante l'installazione apt-get:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

Che equivale a:

export DEBIAN_FRONTEND="noninteractive"

Tuttavia, quando si crea un'immagine da un Dockerfile, al termine di una specifica installazione del pacchetto Debian / Ubuntu (usando apt-get install), la configurazione del pacchetto debconf dice:

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 ... ho trovato il mio errore. Non è possibile inserire commenti nelle righe ENV in Dockerfile. Sto per rispondermi dato che sono sicuro che questo morderà alcune altre persone ...

Risposte:


57

Dovrebbe essere attivamente scoraggiato da impostare DEBIAN_FRONTENDsu noninteractivevia ENV. Il motivo è che la variabile di ambiente persiste dopo la compilazione, ad esempio quando si esegue docker exec -it ... bash. L'impostazione non avrebbe senso qui.

Esistono altri due modi:

  1. Impostalo via ARGpoiché questo è disponibile solo durante la compilazione:

    ARG DEBIAN_FRONTEND=noninteractive
    RUN apt-get -qq install {your-package}
    
  2. Impostalo al volo quando richiesto.

    RUN apt-get update && \
        DEBIAN_FRONTEND=noninteractive apt-get -qq install {your-package}
    

8
si è registrato solo per votare
André Werlang il

@ AndréWerlang: anche a me!
gvgramazio,

27

Ok, la fonte del problema era: non puoi usare # per inserire commenti sulle linee ENV in Dockerfiles perché non c'è delimitatore per dire "fine della variabile env", tutto ciò che è dopo il nome della variabile e lo spazio immediatamente dopo sarà nel variabile.

cioè con la linea Dockerfile:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

La variabile:

DEBIAN_FRONTEND

conterrà esattamente tutta questa riga:

noninteractive    # export DEBIAN_FRONTEND="noninteractive"

ed equivale a fare:

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

Stavo quasi cancellando la mia domanda, ma con i motori di ricerca e Stack Exchange, alcune persone probabilmente troveranno il loro errore qui un giorno ;-)


5
Se questa è la risposta effettiva, dovresti accettarla come tale, quindi la domanda non viene più elencata come senza risposta.
Andy Shinn,

4
È sconsigliato utilizzare ENVper DEBIAN_FRONTEND, vedere: github.com/docker/docker/issues/4032
k0pernikus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.