Beim Management eines PostgreSQL-Containers mit Docker Compose hat die Konfiguration der Umgebungsvariablen einen wesentlichen Einfluss auf das anfängliche Verhalten des Containers und den Neustartvorgang. Besonders die Anwendbarkeit jeder Variablen hängt vom Vorhandensein des Datenvolumens ab, weshalb es wichtig ist, dies genau zu verstehen, um einen sicheren Betrieb zu gewährleisten.


1. Pflicht-Umgebungsvariablen: POSTGRES_PASSWORD



Wenn ein PostgreSQL-Container mit einem Docker-Image betrieben wird, ist POSTGRES_PASSWORD die einzige Pflicht-Umgebungsvariable, die unbedingt festgelegt werden muss, unabhängig vom Status des Datenvolumens.

Variablenname Rolle Anwendbarkeitszeitpunkt Verhalten bei Löschung
POSTGRES_PASSWORD Superuser-Passwort festlegen Immer erforderlich (bei der Erstkonfiguration und im Containerstartprozess) Container Startfehler (Sicherheitsfehler)

Wichtig: Diese Variable ist eine Sicherheitsanforderung, um den Container zu starten, und muss auch dann im docker-compose.yml Datei angegeben sein, wenn bereits Daten vorhanden sind.


2. Initialisierungsvariablen: Verständnis des Anwendbarkeitszeitpunkts

POSTGRES_USER und POSTGRES_DB sind Umgebungsvariablen, die nur bei der erstmaligen Erstellung des Datenbankclusters (wenn das Datenvolumen leer ist) angewendet werden.

Variablenname Rolle Anwendbarkeitszeitpunkt Einfluss von Änderungen beim Neustart
POSTGRES_USER Initialen Superuser-Namen festlegen Nur wenn das Volumen leer ist Wird ignoriert (bestehender Benutzer bleibt erhalten)
POSTGRES_DB Anlegen des initialen Datenbanknamens Nur wenn das Volumen leer ist Wird ignoriert (bestehende DB bleibt erhalten)

📌 Funktionsweise beim Neustart

Wenn Sie einen Container mit einem verbundenen Volumen, das bereits Daten enthält, mit docker-compose up -d neu starten, überspringt das PostgreSQL-Image den Initialisierungsprozess (initdb) und lädt die vorhandenen Daten.

Daher ändern sich bei Änderungen der Containernamen, Logging-Methoden usw. das POSTGRES_USER und POSTGRES_DB Werte nicht für vorhandene Datenbankbenutzer oder -namen.


3. Beispiel für Docker Compose



Hier ist ein einfaches Beispiel für eine docker-compose.yml, das Pflicht- und empfohlene Variablen enthält.

services:
  db:
    image: postgres:latest
    restart: always
    container_name: my_postgres_db  # Containername (änderbar)
    logging:
      driver: "json-file"          # Logging-Methode (änderbar)
    environment:
      # ⚠️ Pflichtvariable: Muss enthalten sein.
      POSTGRES_PASSWORD: your_secure_password 

      # Initialisierungsvariablen: Nur anwendbar, wenn das Volumen leer ist.
      POSTGRES_USER: devuser
      POSTGRES_DB: main_app_db
    ports:
      - "5432:5432"
    volumes:
      # Volumen für dauerhaften Datenspeicher
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

✨ Tipps zur Betriebliche Sicherheit: Sichere Konfigurationsänderungen

Nachdem Sie den Containernamen, die Logging-Einstellungen usw. geändert haben, verwenden Sie den folgenden Befehl, um den Container mit beibehaltenen Daten neu zu starten.

docker-compose up -d

Wichtig: Der Befehl zum Löschen von Volumen mit Daten (docker-compose down -v) sollte unbedingt vermieden werden.