Docker Compose Umgebungen und Variablen
Was dieser Artikel über Compose-Umgebungen behandelt
- Wie Compose Umgebungsvariablen nutzt.
- Unterschied zwischen
env_file,environmentund.env. - Wie man Profile für optionale Services nutzt.
- Override-Dateien für lokale Entwicklung.
- Mehrere Umgebungen mit Compose verwalten.
Einleitung: Docker Compose Umgebungen und Variablen
Docker Compose macht es einfach, mehrere Container gemeinsam zu starten. Wenn dieselbe Compose-Datei aber in verschiedenen Umgebungen laufen soll, braucht man einen sauberen Weg, Konfiguration anzupassen. Umgebungsvariablen, env-Dateien, Compose-Profiles und Override-Dateien helfen, das übersichtlich zu halten. Das vermeidet, dass man dieselbe Konfiguration mehrfach kopieren muss.
Dieser Artikel zeigt, wie man in Docker Compose flexibel mit Umgebungen und Variablen arbeitet.
Wichtige Begriffe
.env: Standard-Datei für Compose-Variablen.env_file: Datei mit Variablen für einen Service.environment: Direkte Variablen im Service.- Variable-Substitution:
${VAR}in Compose-Dateien. - Profile: Optionale Gruppen von Services.
- Override: Zusätzliche Datei, die Basis-Compose erweitert.
- Default-Wert: Wert, falls Variable fehlt.
- Shell-Variable: Variable aus der Shell-Umgebung.
.env im Projekt
Eine .env-Datei im gleichen Verzeichnis wie compose.yaml füllt Variablen:
APP_PORT=3000
DB_NAME=meine_db
DB_PASSWORD=geheim
In compose.yaml:
services:
app:
image: app:latest
ports:
- "${APP_PORT}:3000"
environment:
DB_NAME: ${DB_NAME}
DB_PASSWORD: ${DB_PASSWORD}
Default-Werte
ports:
- "${APP_PORT:-3000}:3000"
Falls APP_PORT nicht gesetzt ist, wird 3000 verwendet.
env_file pro Service
services:
db:
image: postgres:16
env_file:
- db.env
Die Datei db.env enthält Variablen nur für diesen Service.
environment direkt setzen
services:
app:
image: app
environment:
- NODE_ENV=production
- LOG_LEVEL=info
Mischungen sind möglich, führen aber schnell zur Unübersichtlichkeit.
Compose-Profile
Profile erlauben, optional Services zu starten:
services:
web:
image: nginx
profiles:
- web
monitoring:
image: prometheus
profiles:
- monitoring
Start:
docker compose --profile monitoring up -d
Mehrere Compose-Dateien
docker compose -f compose.yaml -f compose.prod.yaml up -d
compose.prod.yaml überschreibt oder ergänzt Einstellungen.
Override-Dateien
Docker Compose lädt automatisch compose.override.yaml, falls vorhanden:
# compose.override.yaml (lokal)
services:
app:
volumes:
- ./src:/app/src
environment:
- DEBUG=1
So bleiben Entwicklungsanpassungen aus dem Produktionsfile heraus.
Unterschiedliche Umgebungen
.
├── compose.yaml
├── compose.dev.yaml
├── compose.prod.yaml
├── .env.dev
└── .env.prod
Start:
docker compose -f compose.yaml -f compose.prod.yaml --env-file .env.prod up -d
Tipps
.env-Dateien niemals ins Git einchecken.- Klare Trennung zwischen lokalen und produktiven Dateien.
- Default-Werte nutzen, um Fehler zu vermeiden.
- Secrets besser in Docker Swarm oder externen Vaults verwalten.
- Variablen konsistent benennen.
- Profile für optionale Tools nutzen.
Typische Stolpersteine
- .env wird nicht geladen: Datei muss im aktuellen Verzeichnis liegen.
- Variablen nicht definiert: Substitution schlägt fehl.
- Falsche YAML-Formatierung:
environmentvs.env_fileverwechseln. - Secrets in
.env: Sicherheitsrisiko. - Override wird automatisch geladen: Unerwartete Konfiguration.
- Leerzeichen in Werten: Beispielsweise bei
environmentkeine Leerzeichen um=.
Weiterführende Links und Infos
FAQ: Compose-Umgebungen
Was ist der Unterschied zwischen .env und env_file?
.env definiert Variablen für Compose selbst, env_file übergibt Variablen an den Container.
Kann ich mehrere .env-Dateien nutzen?
Ja, mit --env-file.
Werden Override-Dateien automatisch geladen?
Ja, compose.override.yaml wird automatisch geladen.
Was sind Compose-Profile? Optionale Gruppen von Services, die nur bei Bedarf gestartet werden.
Soll ich environment im compose.yaml nutzen?
Nur für nicht-geheime Werte. Secrets niemals dort ablegen.
Quellen und weiterführende Literatur
- Compose Env: https://docs.docker.com/compose/environment-variables/
- Compose Profiles: https://docs.docker.com/compose/profiles/
- Multiple Compose Files: https://docs.docker.com/compose/multiple-compose-files/
Zusammenfassung: Docker Compose Umgebungen und Variablen
Docker Compose bietet viele Möglichkeiten, Konfiguration über Variablen und Dateien zu steuern. .env eignet sich für Compose-Variablen, env_file für Service-Umgebungen, Profiles für optionale Dienste und Override-Dateien für lokale Anpassungen. Wer sauber trennt und keine Secrets in die Versionskontrolle gibt, kann damit mehrere Umgebungen elegant mit derselben Basis verwalten.


