3 Min. LesezeitJonas Höttler

Docker frisst Speicher auf dem Mac: was prune wirklich löscht

Docker.raw ist 60 GB groß, docker system prune -a gibt 40 davon frei — und nimmt dabei Dinge mit, die niemand zurückholen kann. Die vier Konten hinter der Zahl, und welcher Befehl welches leert.

Docker als eigener Fund: vier Konten getrennt, drei Urteile, je ein eigener Befehl.
Docker als eigener Fund: vier Konten getrennt, drei Urteile, je ein eigener Befehl.

Auf einem Mac mit Docker Desktop ist der größte einzelne Klumpen Speicher fast immer dieselbe Datei: ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw. Sie wird 40, 60, manchmal 100 GB groß, und ein Aufräum-Programm sieht darin genau eine Zahl.

Diese Zahl ist die Summe von vier getrennten Konten, und sie zu addieren ist der Fehler.

Images
24,8 GBmeist ein Download
Build cache
11,2 GBgefahrlos, baut neu
Containers
1,4 GBSchreibschichten
Local volumes
3,9 GBoft Datenbanken
`docker system df` trennt vier Konten. Ein pauschales prune räumt alle vier gleichzeitig — der Unterschied zwischen Build-Cache und benanntem Volume ist der Unterschied zwischen Warten und Datenverlust.

Was Docker über sich selbst sagt

Die Antwort steht nicht im Dateisystem, sondern im Werkzeug:

docker system df -v

Der Aufruf ist read-only und liefert vier Zeilen — Images, Containers, Local Volumes, Build Cache — jeweils mit SIZE und RECLAIMABLE. Genau diese Aufteilung entscheidet, was ein Aufräumen kostet:

KontoWas drin stecktKostet ein Löschen
Build CacheZwischenschichten vergangener BuildsZeit beim nächsten Build
Imagesgeladene und selbst gebaute Abbildererneuten Download — oder einen verlorenen Build
ContainersSchreibschichten laufender/gestoppter Containeralles, was im Container geschrieben und nicht gemountet wurde
Local VolumesDatenbanken, Uploads, Zuständeechte Daten, unwiederbringlich

Die Befehle, in der Reihenfolge, in der sie weh tun

docker builder prune            # nur Build-Cache. Kostet Zeit, sonst nichts.
docker image prune              # nur unbenutzte, unbenannte Images (dangling).
docker system prune             # + gestoppte Container, ungenutzte Netzwerke.
docker system prune -a          # + JEDES Image ohne laufenden Container.
docker volume prune             # anonyme Volumes.
docker volume prune -a          # auch die benannten. Das sind meistens Daten.

Der Sprung von Zeile drei auf Zeile vier ist ein Flag. Er ist auch der Unterschied zwischen „ich warte beim nächsten Build zwei Minuten“ und „das Image, das ich vor drei Monaten gebaut habe und dessen Dockerfile es nicht mehr gibt, ist weg“.

Der Sprung von Zeile fünf auf Zeile sechs ist ebenfalls ein Flag — und dahinter liegen Postgres-Volumes.

Warum wir den pauschalen Befehl nie vorschlagen

Docker unterscheidet nicht zwischen einem Image, das aus einer Registry kam, und einem, das hier gebaut wurde. Für den Daemon sehen beide gleich aus. Ein Werkzeug, das von außen zuschaut, kann diesen Unterschied also nicht kennen — und darf ihn folglich nicht behaupten.

BalaneDisk zeigt deshalb die vier Konten getrennt, mit drei Urteilen:

  • gefahrlos — Build-Cache, dangling Images
  • vorher hinsehen — Images, Container-Schichten
  • enthält Daten — benannte Volumes

und liefert zu jedem den passenden Befehl statt eines Knopfes. Ausgeführt wird er von dir, im Terminal, mit dem Wissen, was er mitnimmt.

Der Rest der Wahrheit über Docker.raw

Drei Größen gehören zu dieser einen Datei, und sie sind alle drei richtig:

  1. 01Zugewiesene Größe — die Obergrenze, die Docker Desktop in den Einstellungen bekommen hat.
  2. 02Tatsächlich belegt — was macOS an Blöcken wirklich vergeben hat (Sparse-Datei).
  3. 03Innen genutzt — was die Linux-VM davon benutzt.

Nach einem prune sinkt (3) sofort, (2) erst, wenn Docker den freien Platz an macOS zurückgibt. Wer nur auf den Finder schaut, hält das für einen fehlgeschlagenen Aufräumvorgang. Es ist nur ein Abbild, das noch nicht geschrumpft ist.

Kurzfassung

  • Nie mit -a anfangen. docker builder prune zuerst, es kostet nichts außer Zeit.
  • Benannte Volumes einzeln ansehen, nie im Rudel löschen.
  • Docker.raw schrumpft verzögert — das ist kein Fehler.
  • Und der Ordner im Finder ist der falsche Hebel: für einen Cache, den sein Werkzeug verwaltet, ist der Befehl der richtige.

Weiter: Mac-Speicher voll: wo die Gigabyte wirklich stecken.

Häufige Fragen
Was ist Docker.raw und warum ist die Datei so groß?
Docker.raw ist das virtuelle Laufwerk der Linux-VM, in der Docker Desktop auf dem Mac läuft. Es ist eine Sparse-Datei: sie belegt nur, was wirklich beschrieben wurde, wächst aber mit, und sie schrumpft nicht automatisch, wenn du innerhalb der VM etwas löschst.
Warum wird Docker.raw nach dem prune nicht kleiner?
Weil der Platz innerhalb der VM frei wird, das Abbild außen aber seine Größe behält. Docker Desktop gibt ihn beim nächsten Neustart oder über „Clean / Purge data“ an macOS zurück; unter neueren Versionen läuft ein TRIM automatisch.
Ist docker system prune -a gefährlich?
Es löscht keine benannten Volumes, aber alle Images ohne laufenden Container — auch die, die du hier gebaut und nie in eine Registry gepusht hast. Die sind danach weg. Gefährlich für Daten wird erst docker volume prune -a.
ThemenDockerFestplattemacOS

Sieh es auf deinem eigenen Rechner.

Jeder Bildschirm aus diesen Artikeln ist kostenlos nutzbar, so lange du willst.

Quellen und Links
Weiterlesen