tag run images hub dockers compose dockerfile env

dockerfile - run - dockers images



Dockerfile: configure ENV como resultado del comando (4)

Como una adición a la respuesta de DarkSideF.

Debe tener en cuenta que cada línea / comando en Dockerfile se ejecuta en otro contenedor.

Puedes hacer algo como esto:

RUN export bleah=$(hostname -f);echo $bleah;

Esto se ejecuta en un solo contenedor.

¿Es posible establecer una variable ENV del acoplador para el resultado de un comando? Me gusta:

ENV MY_VAR whoami

Quiero que MY_VAR obtenga el valor "root" o lo que sea que devuelva whoami



Esta respuesta es una respuesta a @DarkSideF ,

El método que está proponiendo es el siguiente, en Dockerfile :

RUN bash -l -c ''echo export SECRET_KEY_BASE="$(openssl rand -hex 64)" >> /etc/bash.bashrc''

( agregando una exportación en /etc/bash.bashrc )

Es bueno, pero la variable de entorno solo estará disponible para el proceso /bin/bash , y si intenta ejecutar su aplicación docker, por ejemplo, una aplicación Node.js, /etc/bash.bashrc será completamente ignorado y su aplicación ganada No tiene ni idea de qué es SECRET_KEY_BASE al intentar acceder a process.env.SECRET_KEY_BASE .

Esa es la razón por la cual la palabra clave ENV es lo que todos intentan usar con un comando dinámico porque cada vez que ejecuta su contenedor o usa un comando exec , Docker verificará ENV y canalizará todos los valores en el proceso actualmente en ejecución (similar a -e ) .

Una solución es usar un contenedor (crédito a @duglin en este problema github ). Tenga un archivo contenedor (por ejemplo, envwrapper ) en la raíz de su proyecto que contenga:

#!/bin/bash export SECRET_KEY_BASE="$(openssl rand -hex 64)" export ANOTHER_ENV "hello world" $*

y luego en tu Dockerfile :

... COPY . . RUN mv envwrapper /bin/. RUN chmod 755 /bin/envwrapper CMD envwrapper myapp


Tuve el mismo problema y encontré la forma de establecer la variable de entorno como resultado de la función mediante el uso del comando EJECUTAR en dockerfile.

Por ejemplo, necesito configurar SECRET_KEY_BASE para la aplicación Rails solo una vez sin cambiar, como lo haría cuando ejecutara:

docker run -e SECRET_KEY_BASE="$(openssl rand -hex 64)"

En cambio, escribo en la cadena Dockerfile como:

RUN bash -l -c ''echo export SECRET_KEY_BASE="$(openssl rand -hex 64)" >> /etc/bash.bashrc''

y mi variable env disponible desde root, incluso después del inicio de sesión bash. o tal vez

RUN /bin/bash -l -c ''echo export SECRET_KEY_BASE="$(openssl rand -hex 64)" > /etc/profile.d/docker_init.sh''

entonces es variable disponible en los comandos CMD y ENTRYPOINT

Docker lo almacena en caché como capa y lo cambia solo si cambia algunas cadenas antes.

También puede probar diferentes formas de establecer la variable de entorno.