exportação docker ENV vs RUN

95

Digamos que eu queira combinar esses comandos

RUN command_1
ENV FOO bar
RUN command_2

para dentro

RUN command_1 && export FOO=bar && command_2

e queria saber se definir a variável com RUN exportvs ENVera equivalente.

Em outras palavras, existe uma diferença entre esses comandos em um Dockerfile?

ENV FOO bar

vs

RUN export FOO=bar
User314159
fonte

Respostas:

155

Conforme ilustrado pelo problema 684 , exportnão persistirá nas imagens. (Não se esqueça de que cada diretiva Dockerfile irá gerar um contêiner intermediário, confirmado em uma imagem intermediária: essa imagem não preservará o valor exportado)
ENVirá:

As variáveis ​​de ambiente definidas usando ENVpersistirão quando um contêiner for executado a partir da imagem resultante.
Você pode ver os valores usando docker inspecte alterá-los usando docker run --env <key>=<value>.

O problema estava ilustrando isso com:

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

Quando eu faço docker run [img] bash -c 'echo $PATH'isso nunca inclui /foo/bar.

Tente

Crie um novo dockerfile contendo:

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

Em seguida, construa. O resultado da última etapa é:

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

Você pode ver:

  • FOOpersiste por meio de contêineres intermediários, graças à ENVpalavra - chave;
  • BARnão persiste na próxima etapa, por causa do exportcomando;
  • BAZ é exibido corretamente porque a variável é usada no mesmo contêiner.
VonC
fonte
(Acho que sim, mas :) Isso significa que, dockerpor exemplo, runcom --env-fileou --envexportará essas (por esses argumentos de opção) variáveis? Desculpe por esbarrar em uma resposta tão antiga, mas uma pesquisa na web acabou de me trazer isso. Boa resposta btw.
hakre
@hakre sim, eles são anexados ao ambiente: consulte stackoverflow.com/a/49872152/6309 e abaixo.
VonC
Obrigado pela resposta rápida, mas essa resposta não mostra as variáveis ​​estão marcadas para exportação. Pelo menos não para mim. De qualquer forma, devo fazer meu próprio dever de casa aqui, por exemplo, superuser.com/q/450868/63279 ou pubs.opengroup.org/onlinepubs/9699919799/utilities/… .
hakre