docker ENV vs RUN esportazione


95

Diciamo che voglio combinare questi comandi

RUN command_1
ENV FOO bar
RUN command_2

in

RUN command_1 && export FOO=bar && command_2

e mi chiedevo se impostare la variabile con RUN exportvs ENVfosse equivalente.

In altre parole, c'è una differenza tra questi comandi in un Dockerfile?

ENV FOO bar

vs

RUN export FOO=bar

Risposte:


155

Come illustrato dal numero 684 , exportnon persisterà tra le immagini. (Non dimenticare che ogni direttiva Dockerfile genererà un contenitore intermedio, inserito in un'immagine intermedia: quell'immagine non conserverà il valore esportato)
ENV:

Le variabili di ambiente impostate utilizzando ENVpersisteranno quando un contenitore viene eseguito dall'immagine risultante.
È possibile visualizzare i valori utilizzando docker inspecte modificarli utilizzando docker run --env <key>=<value>.

Il problema stava illustrando che con:

RUN export PATH=$PATH:/foo/bar # from directly in builder

Quando lo faccio docker run [img] bash -c 'echo $PATH'non include mai /foo/bar.

Provalo

Crea un nuovo dockerfile contenente:

FROM centos:6
ENV FOO=foofoo
RUN export BAR=barbar
RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"

Quindi costruiscilo. L'output dell'ultimo passaggio è:

Step 4/4 : RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"
 ---> Running in eb66196b238d
foofoo  bazbaz

Puoi vedere:

  • FOOpersiste attraverso contenitori intermedi, grazie alla ENVparola chiave;
  • BARnon persiste nel passaggio successivo, a causa del exportcomando;
  • BAZ viene visualizzato correttamente perché la variabile viene utilizzata sullo stesso contenitore.

(Immagino di sì, ma :) Significa che dockerad esempio runcon --env-fileo --envesporterà quelle variabili (con questi argomenti di opzione)? Ci scusiamo per aver trovato una risposta così vecchia, ma una ricerca sul web me l'ha appena portato. Bella risposta btw.
hakre

@hakre sì, vengono aggiunti all'ambiente: vedi stackoverflow.com/a/49872152/6309 e sotto.
VonC

Grazie per la rapida risposta, ma quella risposta non mostra le variabili contrassegnate per l'esportazione. Al meno non a me. Ad ogni modo, dovrei fare i miei compiti qui, ad esempio superuser.com/q/450868/63279 o pubs.opengroup.org/onlinepubs/9699919799/utilities/… .
hakre
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.