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.
TipN'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
.
ImportantL'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'attributenv_file
, comme optionnel en utilisant le champrequired
. Lorsquerequired
est défini surfalse
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'attributformat
. Pour plus d'informations, voirformat
. - Les valeurs de votre fichier
.env
peuvent être remplacées depuis la ligne de commande en utilisantdocker 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.