⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Définir des variables d'environnement dans l'environnement de votre conteneur

L'environnement d'un conteneur n'est pas défini tant qu'il n'y a pas d'entrée explicite dans la configuration du service pour que cela se produise. Avec Compose, il existe deux façons de définir des variables d'environnement dans vos conteneurs avec votre fichier Compose.

Tip

N'utilisez pas de variables d'environnement pour transmettre des informations sensibles, telles que des mots de passe, dans vos conteneurs. Utilisez plutôt des secrets.

Utiliser l'attribut environment

Vous pouvez définir des variables d'environnement directement dans l'environnement de votre conteneur avec l'attribut environment dans votre compose.yaml.

Il prend en charge la syntaxe liste et mapping :

services:
  webapp:
    environment:
      DEBUG: "true"

est équivalent à

services:
  webapp:
    environment:
      - DEBUG=true

Voir l'attribut environment pour plus d'exemples sur son utilisation.

Informations supplémentaires

  • Vous pouvez choisir de ne pas définir de valeur et de transmettre les variables d'environnement de votre shell directement à vos conteneurs. Cela fonctionne de la même manière que docker run -e VARIABLE ... :
    web:
      environment:
        - DEBUG

La valeur de la variable DEBUG dans le conteneur est prise de la valeur de la même variable dans le shell dans lequel Compose est exécuté. Notez que dans ce cas, aucun avertissement n'est émis si la variable DEBUG dans l'environnement du shell n'est pas définie.

  • Vous pouvez également tirer parti de l'interpolation. Dans l'exemple suivant, le résultat est similaire à celui ci-dessus mais Compose vous donne un avertissement si la variable DEBUG n'est pas définie dans l'environnement du shell ou dans un fichier .env dans le répertoire du projet.

    web:
      environment:
        - DEBUG=${DEBUG}

Utiliser l'attribut env_file

L'environnement d'un conteneur peut également être défini en utilisant des fichiers .env avec l'attribut env_file.

services:
  webapp:
    env_file: "webapp.env"

L'utilisation d'un fichier .env vous permet d'utiliser le même fichier pour une commande docker run --env-file ... simple, ou de partager le même fichier .env entre plusieurs services sans avoir besoin de dupliquer un long bloc YAML environment.

Cela peut également vous aider à séparer vos variables d'environnement de votre fichier de configuration principal, offrant une façon plus organisée et sécurisée de gérer les informations sensibles, car vous n'avez pas besoin de placer votre fichier .env à la racine du répertoire de votre projet.

L'attribut env_file vous permet également d'utiliser plusieurs fichiers .env dans votre application Compose.

Les chemins vers votre fichier .env, spécifiés dans l'attribut env_file, sont relatifs à l'emplacement de votre fichier compose.yaml.

Important

L'interpolation dans les fichiers .env est une fonctionnalité de Docker Compose CLI.

Elle n'est pas prise en charge lors de l'exécution de docker run --env-file ....

Informations supplémentaires

  • Si plusieurs fichiers sont spécifiés, ils sont évalués dans l'ordre et peuvent remplacer les valeurs définies dans les fichiers précédents.
  • À partir de Docker Compose version 2.24.0, vous pouvez définir votre fichier .env, défini par l'attribut env_file, comme optionnel en utilisant le champ required. Lorsque required est défini sur false et que le fichier .env est manquant, Compose ignore silencieusement l'entrée.
    env_file:
      - path: ./default.env
        required: true # défaut
      - path: ./override.env
        required: false
  • À partir de Docker Compose version 2.30.0, vous pouvez utiliser un format de fichier alternatif pour env_file avec l'attribut format. Pour plus d'informations, voir format.
  • Les valeurs de votre fichier .env peuvent être remplacées depuis la ligne de commande en utilisant docker compose run -e.

Définir des variables d'environnement avec docker compose run --env

Similaire à docker run --env, vous pouvez définir des variables d'environnement temporairement avec docker compose run --env ou sa forme courte docker compose run -e :

$ docker compose run -e DEBUG=1 web python console.py

Informations supplémentaires

  • Vous pouvez également passer une variable du shell ou de vos fichiers d'environnement en ne lui donnant pas de valeur :

    $ docker compose run -e DEBUG web python console.py
    

La valeur de la variable DEBUG dans le conteneur est prise de la valeur de la même variable dans le shell dans lequel Compose est exécuté ou des fichiers d'environnement.

Ressources supplémentaires