Establecer variables de entorno dentro del entorno de tu contenedor
El entorno de un contenedor no se establece hasta que haya una entrada explícita en la configuración del servicio para que esto suceda. Con Compose, hay dos formas de establecer variables de entorno en tus contenedores a través de tu archivo de Compose.
TipNo utilices variables de entorno para pasar información confidencial, como contraseñas, a tus contenedores. En su lugar, utiliza secretos.
Usa el atributo environment
Puedes establecer variables de entorno directamente en el entorno de tu contenedor utilizando el
atributo environment en tu archivo compose.yaml.
Admite tanto la sintaxis de lista como la de mapeo:
services:
webapp:
environment:
DEBUG: "true"es equivalente a
services:
webapp:
environment:
- DEBUG=trueConsulta el
atributo environment para ver más ejemplos sobre cómo utilizarlo.
Información adicional
Puedes optar por no establecer un valor y pasar las variables de entorno de tu shell directamente a tus contenedores. Funciona de la misma manera que
docker run -e VARIABLE ...:web: environment: - DEBUGEl valor de la variable
DEBUGen el contenedor se toma del valor de la misma variable en la shell en la que se ejecuta Compose. Ten en cuenta que, en este caso, no se emite ninguna advertencia si la variableDEBUGen el entorno de la shell no está configurada.También puedes aprovechar la interpolación. En el siguiente ejemplo, el resultado es similar al anterior, pero Compose te mostrará una advertencia si la variable
DEBUGno está configurada en el entorno de la shell o en un archivo.enven el directorio del proyecto.web: environment: - DEBUG=${DEBUG}
Usa el atributo env_file
El entorno de un contenedor también se puede configurar mediante archivos .env junto con el
atributo env_file.
services:
webapp:
env_file: "webapp.env"El uso de un archivo .env te permite utilizar el mismo archivo para un comando convencional docker run --env-file ... o compartir el mismo archivo .env entre múltiples servicios sin la necesidad de duplicar un bloque largo de environment en YAML.
También te ayuda a mantener tus variables de entorno separadas de tu archivo de configuración principal, proporcionando una forma más organizada y segura de gestionar información confidencial, ya que no necesitas colocar tu archivo .env en la raíz del directorio de tu proyecto.
El
atributo env_file también permite usar múltiples archivos .env en tu aplicación de Compose.
Las rutas a tu archivo .env, especificadas en el atributo env_file, son relativas a la ubicación de tu archivo compose.yaml.
ImportantLa interpolación en archivos
.enves una característica de la CLI de Docker Compose.No es compatible cuando ejecutas
docker run --env-file ....
Información adicional
- Si se especifican múltiples archivos, se evalúan en orden y pueden sobrescribir los valores establecidos en archivos anteriores.
- A partir de la versión 2.24.0 de Docker Compose, puedes configurar tu archivo
.env, definido por el atributoenv_file, como opcional utilizando el camporequiredfield. Cuandorequiredse establece enfalsey el archivo.envno existe, Compose ignora la entrada de forma silenciosa.env_file: - path: ./default.env required: true # por defecto - path: ./override.env required: false - A partir de la versión 2.30.0 de Docker Compose, puedes usar un formato de archivo alternativo para
env_filecon el atributoformat. Para obtener más información, consultaformat. - Los valores de tu archivo
.envse pueden sobrescribir desde la línea de comandos utilizandodocker compose run -e.
Establece variables de entorno con docker compose run --env
De manera similar a docker run --env, puedes establecer variables de entorno temporalmente con docker compose run --env o su forma abreviada docker compose run -e:
$ docker compose run -e DEBUG=1 web python console.py
Información adicional
También puedes pasar una variable desde la shell o tus archivos de entorno sin proporcionarle un valor:
$ docker compose run -e DEBUG web python console.py
El valor de la variable DEBUG en el contenedor se toma del valor de la misma variable en la shell en la que se ejecuta Compose o de los archivos de entorno.