Docker Compose : env_file, environment et .env, qui fait quoi

Guide env_file de Docker Compose

Docker Compose : env_file vs environment vs .env, expliqués | We.Inc

Ce que font env_file, environment et le fichier .env dans Docker Compose, quelle valeur l'emporte en cas de conflit et comment fonctionne l'interpolation ${VAR:-default}, avec un résolveur.

Dans Docker Compose, env_file charge un fichier de lignes KEY=value dans le conteneur d'un service. L'attribut environment définit des variables du conteneur directement et l'emporte sur env_file quand les deux nomment la même clé. Le fichier .env placé à côté de compose.yaml est différent : Compose le lit pour remplir les placeholders ${VAR} dans le YAML lui-même.

Trois façons de fournir des variables à Compose

La confusion vient du nom : un fichier appelé .env et un attribut appelé env_file semblent désigner la même chose, mais l'un configure le fichier Compose et l'autre configure un conteneur. Utilisez le résolveur pour voir quelle source l'emporte pour une variable, puis essayez les formes d'interpolation avec une variable définie, vide ou non définie.

Questions fréquentes

Quelle est la différence entre env_file et environment ?

Les deux placent des variables dans le conteneur d'un service. env_file les lit depuis un ou plusieurs fichiers, environment les liste dans compose.yaml. Quand la même clé apparaît dans les deux, la valeur de environment l'emporte, même si elle est vide.

Compose transmet-il automatiquement mon fichier .env aux conteneurs ?

Non. Le fichier .env du projet sert uniquement à substituer ${VAR} dans le fichier Compose. Une variable n'atteint un conteneur que si un service la nomme sous environment, ou charge le fichier avec env_file.

Où Compose cherche-t-il le fichier .env ?

Dans le répertoire du projet, c'est-à-dire le dossier indiqué avec --project-directory, sinon le dossier du premier fichier -f, sinon votre dossier courant. Utilisez --env-file pour pointer vers un autre fichier ; s'il y en a plusieurs, les derniers remplacent les premiers.

Les chemins de env_file sont-ils relatifs à l'endroit où je lance la commande ?

Non. Les chemins relatifs de env_file sont résolus à partir du dossier qui contient le fichier Compose, donc la stack fonctionne quel que soit l'endroit d'où vous la lancez.

Que devient ${VAR} quand VAR n'est pas définie ?

Compose affiche un avertissement et substitue une chaîne vide. Utilisez ${VAR:-fallback} pour fournir une valeur par défaut, ou ${VAR:?message} pour vous arrêter plutôt sur une erreur.

La liste de priorité, de haut en bas

Clés sans valeur

Toutes les formes d'interpolation

Ce que donne chaque forme pour une VAR définie, vide ou non définie

Fichiers Compose à copier

env_file avec surcharges dans environment

Les réglages partagés viennent de fichiers ; les entrées de environment l'emportent pour les clés qu'elles nomment. Le fichier local est optionnel.

.env du projet utilisé uniquement pour l'interpolation

Ces deux valeurs remplissent des placeholders dans compose.yaml. Aucune n'atteint un conteneur sauf si un service la mentionne.

Utiliser ces valeurs dans compose.yaml

Le tag de l'image et le port publié viennent de .env ; le mot de passe doit être défini, sinon Compose s'arrête avec un message clair.

Vérifier ce que Compose a résolu

config affiche le modèle final avec chaque variable remplie ; --environment liste les valeurs utilisées pour la substitution.

Quelle valeur l'emporte ?

La variable APP_MODE est définie aux endroits cochés ci-dessous.

Où la variable est définie

Valeur

Le conteneur reçoit APP_MODE={v} depuis : {n}

Définie nulle part, donc APP_MODE est absente du conteneur.

Testeur d'interpolation

Expression

VAR est

définie mais vide

Valeur de VAR

Résultat : {v}

Résultat : une chaîne vide

Compose s'arrête avec l'erreur : {v}

Résultat : une chaîne vide, et Compose affiche un avertissement

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site