Docker prune richtig nutzen: Container, Images und Volumes aufräumen
Mit docker prune entfernst du ungenutzte Container, Images und Volumes und schaffst wieder freien Speicher. Inklusive Beispiele und Best Practices für echte Projekte.
Bernd Fischer
01. Nov 2024 · 4 Minuten Lesezeit
Übersicht über prune
Mit den verschiedenen docker prune-Befehlen lassen sich ungenutzte Docker-Ressourcen gezielt entfernen. Dazu gehören gestoppte Container, nicht mehr referenzierte Images, ungenutzte Netzwerke und – je nach Befehl – auch Volumes.
Gerade auf Entwicklungsrechnern oder Build-Systemen sammeln sich solche Ressourcen mit der Zeit an. Bevor Du jedoch einfach alles entfernst, solltest Du zuerst prüfen, wo Docker tatsächlich Speicher belegt:
docker system df
Damit bekommst Du einen Überblick über Images, Container, Volumes und Build-Cache.
prune ist anschließend ein Werkzeug zum Aufräumen – nicht zur Diagnose.
Entfernen gestoppter Container
Gestoppte Container bleiben nach ihrer Ausführung bestehen und können weiterhin Speicher belegen.
Mit folgendem Befehl entfernst Du alle gestoppten Container:
docker container prune
Docker zeigt vor dem Löschen eine Warnung und fragt nach einer Bestätigung.
Falls Du die Rückfrage bewusst überspringen möchtest:
docker container prune --force
Laufende Container werden dabei nicht entfernt.
Vorher kannst Du Dir ansehen, welche gestoppten Container überhaupt vorhanden sind:
docker ps -a
So weißt Du, was der Cleanup tatsächlich betrifft.
Entfernen ungenutzter Volumes
Volumes speichern Daten unabhängig vom Lebenszyklus eines Containers. Genau das macht sie nützlich – und gleichzeitig gefährlich beim unbedachten Aufräumen.
Nicht mehr verwendete Volumes lassen sich mit folgendem Befehl entfernen:
docker volume prune
Ohne Rückfrage:
docker volume prune --force
Bevor Du Volumes löschst, solltest Du prüfen, welche vorhanden sind:
docker volume ls
Ein einzelnes Volume kannst Du genauer untersuchen:
docker volume inspect <volume-name>
Wichtig: Ein Volume kann Daten enthalten, die Du später noch brauchst, auch wenn aktuell kein Container darauf zugreift.
Entfernen nicht referenzierter Images
Docker speichert Images und Image-Layer lokal. Besonders nach häufigen Builds können sich viele alte oder nicht mehr referenzierte Images ansammeln.
Mit:
docker image prune
entfernst Du standardmäßig sogenannte dangling Images.
Ohne Rückfrage:
docker image prune --force
Wenn Du zusätzlich alle aktuell nicht verwendeten Images entfernen möchtest:
docker image prune --all
Das ist deutlich aggressiver.
Vorher lohnt sich ein Blick auf die vorhandenen Images:
docker image ls
So kannst Du besser einschätzen, ob Du nur Build-Reste entfernst oder auch Images, die Du später wieder benötigen könntest.
Entfernen ungenutzter Netzwerke
Docker Compose und manuell gestartete Container erzeugen häufig eigene Netzwerke.
Ungenutzte Netzwerke lassen sich entfernen mit:
docker network prune
Oder ohne Rückfrage:
docker network prune --force
Welche Netzwerke aktuell existieren, zeigt:
docker network ls
Entfernt werden nur Netzwerke, die aktuell nicht von Containern verwendet werden.
Mehrere ungenutzte Ressourcen auf einmal entfernen
Mit:
docker system prune
räumt Docker mehrere Ressourcentypen gleichzeitig auf.
Dazu gehören unter anderem:
- gestoppte Container
- ungenutzte Netzwerke
- dangling Images
- Teile des Build-Caches
Volumes bleiben standardmäßig erhalten.
Mit:
docker system prune --all
werden zusätzlich alle nicht verwendeten Images entfernt.
Noch aggressiver ist:
docker system prune --all --volumes
Damit werden auch ungenutzte Volumes einbezogen.
Vorsicht:
docker system prune --all --volumessollte nicht als reflexartige Standardlösung verwendet werden. Prüfe vorher, welche Images und Volumes noch gebraucht werden und ob dort relevante Daten liegen.
Beispiel aus der Praxis
Angenommen, docker system df zeigt:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 18 3 12.4GB 8.7GB
Containers 9 2 1.1GB 860MB
Local Volumes 7 4 5.6GB 1.2GB
Build Cache 42 0 9.3GB 9.3GB
Dann ist es sinnvoller, nicht sofort alles zu löschen, sondern gezielt vorzugehen.
Zuerst könnten gestoppte Container entfernt werden:
docker container prune
Danach nicht mehr benötigte Images:
docker image prune
Falls der Build-Cache der größte Speicherfresser ist:
docker builder prune
Volumes würde ich erst dann anfassen, wenn klar ist, welche Daten darin liegen.
Genau dieser Unterschied ist wichtig:
Diagnose
↓
betroffene Ressource finden
↓
gezielt aufräumen
↓
erneut prüfen
statt:
Speicher knapp
↓
alles löschen
Docker-Probleme systematisch untersuchen
prune hilft beim Aufräumen. Es erklärt aber nicht, warum Docker überhaupt so viel Speicher belegt oder warum bestimmte Ressourcen immer wieder entstehen.
Dasselbe gilt für viele andere Docker-Probleme: Container beenden sich sofort, Ports sind nicht erreichbar, Daten scheinen verschwunden zu sein oder ein Build wird plötzlich langsam.
Wenn Du solche Probleme nicht nur beheben, sondern systematisch diagnostizieren möchtest, findest Du in meinem Buch Docker Troubleshooting 20 praktische Diagnose- und Reparaturrezepte für Entwickler.
Behandelt werden unter anderem:
- Speicherverbrauch durch Images, Container, Volumes und Build-Cache
- Logs, Exit Codes und Healthchecks
- Netzwerkprobleme mit Docker Compose
- Ports, Listener und Readiness
- Volumes, Bind Mounts und Dateirechte
.env, Container-Environment und Build-Secrets- langsame Builds, Cache-Invalidierung und Image-Layer
Docker ist nur ein Teil der Lösung
Cleanup-Befehle helfen dabei, angesammelte Ressourcen zu entfernen. In realen Projekten entstehen Probleme jedoch oft durch die Struktur des gesamten Systems: unklare Deployments, schlecht getrennte Services oder uneinheitliche Build- und Laufzeitprozesse.
Gerade bei Django-Projekten lohnt es sich deshalb, nicht nur Docker selbst zu betrachten, sondern auch die Architektur der Anwendung.
Wenn Dich interessiert, wie ein wartbares Django-Projekt aufgebaut sein kann, findest Du hier eine ausführliche Erklärung: