Docker-Volumes verstehen
Docker-Container sind von Natur aus vergänglich. Wenn ein Container gestoppt und entfernt wird, gehen alle im Container-Dateisystem geschriebenen Daten verloren. Die meisten realen Anwendungen benötigen persistente Daten.
Docker bietet drei Mechanismen für die Datenpersistenz:
- Benannte Volumes: Von Docker verwaltet, gespeichert in
/var/lib/docker/volumes/. - Bind Mounts: Bilden ein bestimmtes Host-Verzeichnis in den Container ab.
- tmpfs-Mounts: In-Memory-Speicher, der beim Stoppen des Containers verworfen wird.
Voraussetzungen
- Docker Engine 20.10+ installiert.
- Shell-Zugang zum Docker-Host.
- Grundlegende Vertrautheit mit Docker-CLI-Befehlen.
Häufige Docker-Volume-Probleme
1. Datenverlust beim Neustart
docker volume create myapp-data
docker run -d --name postgres-db \
-v myapp-data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=secret postgres:16
Kritisch:
docker-compose down -vwird alle Volumes löschen.
2. Berechtigung-verweigert-Fehler
docker exec mycontainer id
ls -lan /pfad/zum/host/verzeichnis
docker exec mycontainer ls -lan /data
docker run -d -v myvolume:/data myimage
docker run -d --user "$(id -u):$(id -g)" -v ./data:/data myimage
3. Bind Mount zeigt leeres Verzeichnis
Bind Mounts überlagern das Container-Dateisystem. Verwenden Sie benannte Volumes.
4. Verwaiste Volumes verbrauchen Speicherplatz
docker volume ls -f dangling=true
docker system df
docker volume prune
5. Daten synchronisieren nicht auf macOS/Windows
- Verwenden Sie VirtioFS (Docker Desktop 4.15+).
- Verwenden Sie benannte Volumes für große Datensätze.
Prävention und Best Practices
- Verwenden Sie immer benannte Volumes für Datenbanken.
- Verwenden Sie niemals
docker-compose down -vin der Produktion. - Sichern Sie Volumes regelmäßig.
- Konfigurieren Sie schreibgeschützte Mounts mit dem
:ro-Suffix.
Zusammenfassung
- Docker-Container sind vergänglich — verwenden Sie immer Volumes für persistente Daten.
- Berechtigungsfehler entstehen durch UID-Diskrepanzen.
- Benannte Volumes werden in der Produktion gegenüber Bind Mounts bevorzugt.
- Bereinigen Sie verwaiste Volumes mit
docker volume prune.