Skip to content
BotServBotServ
DockerComposeEnvOverrideProfile

Docker Compose Umgebungen und Variablen

Umgebungsvariablen, Env-Dateien, Profiles und Overrides in Docker Compose. Mehrere Setups mit einer Compose-Datei.

S

schutzgeist

2 min read
Docker Compose Umgebungen und Variablen

Docker Compose Umgebungen und Variablen

Was dieser Artikel über Compose-Umgebungen behandelt

  • Wie Compose Umgebungsvariablen nutzt.
  • Unterschied zwischen env_file, environment und .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: environment vs. env_file verwechseln.
  • Secrets in .env: Sicherheitsrisiko.
  • Override wird automatisch geladen: Unerwartete Konfiguration.
  • Leerzeichen in Werten: Beispielsweise bei environment keine Leerzeichen um =.

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

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.

Zurück zum KI Blog
Share:

Ähnliche Beiträge