Lorsque vos projets deviennent plus complexes, un seul fichier .env peut vite devenir encombrant. Docker Compose propose une solution pratique : env_file, qui permet de charger des fichiers supplémentaires de variables d’environnement pour un service spécifique.
Comment ça fonctionne ?
.envest toujours chargé automatiquement par Docker Compose, même si vous ne le mentionnez pas.env_filepermet d’ajouter un ou plusieurs fichiers spécifiques à un service.- Ces fichiers ne peuvent contenir que des variables d’environnement (pas de
restart,imageou autres instructions YAML).
Exemple de structure de projet :
project/
├─ docker-compose.yml
├─ .env
├─ db.env
├─ app.envFichier db.env :
DB_PASSWORD=supersecret
DB_NAME=monprojet
Fichier app.env :
APP_ENV=production
APP_DEBUG=false
Dans le docker-compose.yml :
services:
db:
image: mariadb:10.11
env_file:
- db.env
environment:
MYSQL_USER: ${DB_USER} # interpolation depuis .env
php:
image: php:8.2-apache
env_file:
- app.env
Points clés à retenir
- .env vs env_file
| Élément | Chargé automatiquement ? | Peut contenir quoi ? | Scope |
|---|---|---|---|
.env | Oui | Tout type de variable (env, image, tag, restart, ports via interpolation) | Global à tout le docker-compose |
env_file | Non, à déclarer | Seulement variables d’environnement | Par service |
- Ordre de priorité des variables
- Variables dans le docker-compose.yml (via
environment:) → priorité la plus haute. Variables dansenv_file→ priorité intermédiaire. Variables dans.env→ priorité la plus basse
DB_PASSWORDest défini dans.envet dansdb.env, Docker Compose utilisera la valeur dedb.env. - Variables dans le docker-compose.yml (via
- Possibilité de mélange
.envpeut toujours être utilisé pour interpoler des paramètres commerestart: ${RESTART_POLICY}ouimage: myimage:${TAG}.env_fileest surtout pratique pour séparer les secrets ou configs spécifiques par service.
📌 À retenir :
.env→ le coffre-fort global, utile pour l’interpolation et la configuration générale.env_file→ fichiers dédiés à un service pour garder les configs propres et séparées.- Variables déclarées directement dans le YAML >
env_file>.env.