Compartir comentarios
Las respuestas se generan en base a la documentación.

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.

Tip

No 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=true

Consulta 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:
        - DEBUG

    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. Ten en cuenta que, en este caso, no se emite ninguna advertencia si la variable DEBUG en 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 DEBUG no está configurada en el entorno de la shell o en un archivo .env en 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.

Important

La interpolación en archivos .env es 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 atributo env_file, como opcional utilizando el campo required field. Cuando required se establece en false y el archivo .env no 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_file con el atributo format. Para obtener más información, consulta format.
  • Los valores de tu archivo .env se pueden sobrescribir desde la línea de comandos utilizando docker 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.

Recursos adicionales