Wenn Docker‑Compose über längere Zeit läuft, sammelt sich schnell Ballast an: verwaiste Volumes, ungenutzte Images und veraltete Netzwerke. Ich habe das selbst erlebt: Nach mehreren Projekten auf demselben Host lief der Speicherplatz davon, Backups wurden komplizierter und das Debugging zäher. In diesem Artikel zeige ich dir Schritt für Schritt, wie ich Docker‑Compose aufräume — sicher, kontrolliert und ohne ungewollten Datenverlust.
Warum aufräumen? (und was kann schiefgehen)
Kurz und knapp: Freier Speicherplatz, bessere Übersicht und weniger Überraschungen beim Deploy. Allerdings besteht das Risiko, dass du wichtige Daten löschst, wenn du Volumes oder Images entfernst, die noch gebraucht werden. Besonders bei named volumes (nicht Bind‑Mounts) liegt oft Persistenz von Daten — z. B. Datenbanken oder Uploads — und die versehentliche Löschung kann schwerwiegende Folgen haben.
Sicherheitsprinzipien vorab
Meine Faustregeln bevor ich irgendetwas lösche:
Erste Bestandsaufnahme
Ich starte mit einer Inventur. Die folgenden Kommandos geben mir einen Überblick:
docker ps -a — laufende und gestoppte Container.docker images — lokale Images, inklusive dangling Images.docker volume ls — alle Volumes.docker network ls — Netzwerke, auch die von Compose erzeugten.Für Compose‑Stacks verwende ich oft den Compose‑Name als Filter, z. B. docker ps --filter "name=mein_stack", um zu sehen, was zu einem Projekt gehört.
Volumes prüfen ohne Risiko
Volumes sind der heikelste Teil. So gehe ich vor, um ihre Bedeutung zu prüfen:
docker ps -a --filter volume= oder detaillierter mit docker inspect .docker run --rm -it -v my_volume:/data busybox sh, dann ls -la /data.Das ist sicher, weil der temporäre Container nichts an den Daten verändert, solange du keine Schreibbefehle ausführst.
Volumes sichern (Backup)
Bevor ich lösche, sichere ich Volumes. Zwei einfache Methoden, die ich regelmäßig benutze:
docker run --rm -v my_volume:/data -v $(pwd):/backup busybox tar cvf /backup/my_volume_2026-02-01.tar /dataIch lege das Backup an einem sicheren Ort ab (externes Laufwerk oder S3). So kann ich jederzeit wiederherstellen.
Volumes löschen — sichere Vorgehensweise
Nachdem ich sichergestellt habe, dass ein Volume wirklich verwaist ist und gesichert wurde, lösche ich es:
docker volume rm my_volumeWenn mehrere Volumes auf einmal weg können, nutze ich gezielte Muster oder Skripte, aber niemals docker volume prune -f ohne vorherige Prüfung. Ich nutze den Prune‑Befehl nur, wenn ich ganz sicher bin und vorher Backups erstellt habe.
Images aufräumen
Images brauchen Platz, vor allem sogenannte dangling images („
docker images -f "dangling=true" — zur Kontrolle.docker image prune — löscht dangling images.Wenn ich unbenutzte Images komplett entfernen will:
docker image prune -aWichtig: Das entfernt auch Images, die aktuell von keinem Container verwendet werden — eventuell aber später wieder gebraucht werden. Bei kritischen Produktionsumgebungen achte ich darauf, Images über Tags (z. B. myapp:stable) zu verwalten, damit ich reproduzierbare Builds habe.
Netzwerke bereinigen
Compose erstellt typischerweise Netzwerke mit dem Projekt‑Prefix. Unbenutzte Netzwerke kannst du mit folgenden Befehlen prüfen und löschen:
docker network lsdocker network inspect — zeigt verbundene Container.docker network rm Netzwerke sind in der Regel harmlos zu löschen, solange keine Container mehr daran hängen. Ich prüfe immer mit inspect, bevor ich entferne.
Compose‑spezifische Befehle
Bei Docker Compose gibt es hilfreiche Flags:
docker compose down — stoppt und entfernt Container, aber belässt Volumes.docker compose down --volumes — entfernt auch die von Compose erstellten Volumes (Achtung: Datenverlust möglich).docker compose rm -f — entfernt gestoppte Container.Ich nutze docker compose down --volumes nur, wenn ich sicher bin, dass die Volumes temporär sind oder bereits gesichert wurden. Bei Datenbanken vermeide ich das in Produktionsstacks.
Systemweit aufräumen
Wenn ich einen gründlichen Cleanup möchte und weiß, dass alles gesichert ist, verwende ich:
| Befehl | Wirkung |
docker system prune | Entfernt gestoppte Container, dangling images und ungenutzte Netzwerke. |
docker system prune -a | Zusätzlich entfernt unbenutzte Images (auch getaggte). |
docker volume prune | Entfernt alle unbenutzten Volumes (Vorsicht!). |
Ich führe diese Befehle interaktiv aus (ohne -f) und lese die Abfrage genau — das hat mich schon oft gerettet.
Tipps aus der Praxis
project=meinprojekt, damit ich später leichter filtern kann.Wiederherstellung
Wenn doch mal etwas gelöscht wurde, hilft oft ein Backup‑Tar:
docker run --rm -v my_volume:/data -v $(pwd):/backup busybox sh -c "cd /data && tar xvf /backup/my_volume_2026-02-01.tar --strip 1"Oder ich erstelle ein neues Volume und kopiere die Daten zurück. Wichtig ist, dass die Rechte und Besitzer stimmen; bei Datenbanken achte ich zusätzlich auf Konsistenz (z. B. sauberes Dump/Restore statt einfach Kopieren).
Wenn du magst, kann ich dir ein kurzes Skript zusammenstellen, das die meisten Prüfungen automatisiert (Liste der Volumes mit Anzeige der zugehörigen Container, optionales Backup‑Toggle). Sag mir kurz, welche Distribution/Umgebung du nutzt (Linux, macOS, Docker Desktop) und ob du Compose V1 oder V2 einsetzt — dann passe ich das Skript an.