Come illustrato dal numero 684 , export
non 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 ENV
persisteranno quando un contenitore viene eseguito dall'immagine risultante.
È possibile visualizzare i valori utilizzando docker inspect
e 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:
FOO
persiste attraverso contenitori intermedi, grazie alla ENV
parola chiave;
BAR
non persiste nel passaggio successivo, a causa del export
comando;
BAZ
viene visualizzato correttamente perché la variabile viene utilizzata sullo stesso contenitore.
docker
ad esempiorun
con--env-file
o--env
esporterà 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.