# 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](/compose/how-tos/use-secrets/).

## Usa el atributo `environment`

Puedes establecer variables de entorno directamente en el entorno de tu contenedor utilizando el [atributo `environment`](/reference/compose-file/services/#environment) en tu archivo `compose.yaml`.

Admite tanto la sintaxis de lista como la de mapeo:

```yaml
services:
  webapp:
    environment:
      DEBUG: "true"
```

es equivalente a

```yaml
services:
  webapp:
    environment:
      - DEBUG=true
```

Consulta el [atributo `environment`](/reference/compose-file/services/#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 ...`:

  ```yaml
  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](/compose/how-tos/environment-variables/set-environment-variables/variable-interpolation/#interpolation-syntax). 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.

  ```yaml
  web:
    environment:
      - DEBUG=${DEBUG}
  ```

## Usa el atributo `env_file`

El entorno de un contenedor también se puede configurar mediante [archivos `.env`](/compose/how-tos/environment-variables/set-environment-variables/variable-interpolation/#env-file) junto con el [atributo `env_file`](/reference/compose-file/services/#env_file).

```yaml
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`](/reference/compose-file/services/#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.
  ```yaml
  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`](/reference/compose-file/services/#format).
- Los valores de tu archivo `.env` se pueden sobrescribir desde la línea de comandos utilizando [`docker compose run -e`](#set-environment-variables-with-docker-compose-run---env).

## 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`:

```console
$ 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:

  ```console
  $ 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

- [Comprender la precedencia de las variables de entorno](/compose/how-tos/environment-variables/set-environment-variables/envvars-precedence/)
- [Establecer o cambiar variables de entorno predefinidas](/compose/how-tos/environment-variables/set-environment-variables/envvars/)
- [Explorar buenas prácticas](/compose/how-tos/environment-variables/set-environment-variables/best-practices/)
- [Comprender la interpolación](/compose/how-tos/environment-variables/set-environment-variables/variable-interpolation/)

