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.
Es sind keine Kommentare vorhanden.