docker ENV vs exportación RUN

91

Digamos que quiero combinar estos comandos

RUN command_1
ENV FOO bar
RUN command_2

dentro

RUN command_1 && export FOO=bar && command_2

y me preguntaba si establecer la variable con RUN exportvs ENVera equivalente.

En otras palabras, ¿hay alguna diferencia entre estos comandos en un Dockerfile?

ENV FOO bar

vs

RUN export FOO=bar
Usuario314159
fuente

Respuestas:

148

Como se ilustra en el número 684 , exportno persistirá en las imágenes. (No olvide que cada directiva de Dockerfile generará un contenedor intermedio, comprometido en una imagen intermedia: esa imagen no conservará el valor exportado)
ENV:

Las variables de entorno establecidas con ENVpersistirán cuando se ejecute un contenedor desde la imagen resultante.
Puede ver los valores usando docker inspecty cambiarlos usando docker run --env <key>=<value>.

El problema estaba ilustrando eso con:

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

Cuando lo hago docker run [img] bash -c 'echo $PATH'nunca lo incluye /foo/bar.

Intentalo

Cree un nuevo archivo docker que contenga:

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

Entonces constrúyelo. El resultado del último paso es:

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

Puedes ver:

  • FOOpersiste a través de contenedores intermedios, gracias a la ENVpalabra clave;
  • BARno persiste en el siguiente paso debido al exportcomando;
  • BAZ se muestra correctamente porque la variable se utiliza en el mismo contenedor.
VonC
fuente
(Supongo que sí, pero :) ¿Significa que, dockerpor ejemplo, runcon --env-fileo --envexportará esas (por estos argumentos de opción) variables? Perdón por encontrarme con una respuesta tan antigua, pero una búsqueda web me acaba de plantearla. Buena respuesta por cierto.
hakre
@hakre sí, se adjuntan al entorno: consulte stackoverflow.com/a/49872152/6309 y más abajo.
VonC
Gracias por la respuesta rápida, pero esa respuesta no muestra que las variables están marcadas para exportación. Al menos no para mí. De todos modos, debo hacer mi tarea aquí, por ejemplo superuser.com/q/450868/63279 o pubs.opengroup.org/onlinepubs/9699919799/utilities/... .
Hakre