Docker occupa spazio sul mio Mac

Docker Desktop tiene tutto in un file. Cresce a ogni build, e cancellare immagini non lo rende più piccolo. Ecco perché, e cosa recupera davvero lo spazio.

Gratis da scaricare e scansionare. Pulire richiede una licenza: un pagamento per computer, Mac o Windows.

Archiviazione: treemap di una cartella Inizio da 297,8 GB per categoria

Dov'è lo spazio

Su un Mac, Docker Desktop tiene tutto dentro una macchina virtuale Linux, e l'intero disco di quella macchina è un unico file sparse:

~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw

Controlla la dimensione reale su disco — non quella logica, che è sempre il massimo che hai concesso a Docker:

du -h -d0 ~/Library/Containers/com.docker.docker/Data/vms/0/data/

Perché cancellare immagini non lo riduce

Elimina un'immagine e lo spazio si libera solo dentro la macchina virtuale. Il file sul tuo Mac resta grande com'era, perché macOS gli ha già assegnato tutto quello spazio. Le versioni recenti di Docker Desktop inviano TRIM dall'interno della VM, cosa che permette a macOS di recuperare i blocchi liberati, ma succede con i tempi di Docker e non nel momento in cui fai il prune. Fino ad allora, docker system df riporta gigabyte liberati mentre il Finder non mostra alcun cambiamento.

Riprendersi lo spazio

In ordine: prima il meno distruttivo.

1. Chiedi a Docker i suoi totali

Parti sempre da qui. Divide immagini, container, volumi e cache di build, e ti dice quanto di ciascuno è recuperabile.

docker system df -v

2. Svuotare la cache di build

Su una macchina che costruisce immagini regolarmente questa è di solito la voce più grande e la più sicura da rimuovere: rende solo più lenta la build successiva.

docker builder prune -a

3. Ripulire ciò che davvero non è usato

Container fermi, immagini orfane e reti inutilizzate:

docker system prune

Aggiungi -a per rimuovere anche ogni immagine non usata da un container in esecuzione — il che significa riscaricarle dopo. Aggiungi quanto segue --volumes solo se sei certo: nei volumi è dove i database tengono i loro dati, ed è l'unico comando di questa pagina che distrugge qualcosa che non puoi riscaricare.

4. Elenca i volumi prima di toccarli

Guarda cosa sparirebbe davvero:

docker volume ls
docker volume ls -f dangling=true

5. Far recuperare il file a macOS

Dopo il prune, Docker Desktop ha un modo previsto per restituire i blocchi liberati: Impostazioni → Risorse → Avanzate → Utilizzo disco, oppure uscire e riaprire Docker Desktop, che all'avvio innesca il TRIM. Dagli un minuto e ricontrolla la dimensione del file prima di decidere che non ha funzionato.

6. Abbassare il limite del disco

In Impostazioni → Risorseil limite del disco virtuale è quanto Docker.raw può crescere. Abbassarlo non libera nulla di per sé, ma mette un tetto al problema. Averlo alzato «per sicurezza» è il motivo per cui il file ha raggiunto 64 GB.

7. L'ultima risorsa

Impostazioni → Risoluzione dei problemi → Clean / Purge data azzera completamente il disco della macchina virtuale e riporta il file quasi a zero. Cancella ogni immagine, container e volume che hai. Usalo quando nient'altro ha funzionato e sai cosa c'è nei tuoi volumi.

Non cancellare Docker.raw dal Finder. Non è un file di cache: sono i dati dell'intera installazione di Docker, e rimuoverlo mentre Docker è in esecuzione può lasciare la macchina virtuale in uno stato che richiederà comunque un ripristino.

Vale la pena controllare anche

Docker raramente è solo

Sul Mac dove Docker è arrivato a 50 GB, DerivedData di Xcode e i modelli di IA locali sono di solito subito dietro. Se stai recuperando spazio, conviene misurare l'intero disco una volta invece di sistemare una cosa alla volta. La lista completa

Su Linux non c'è un file immagine

Su Linux Docker scrive direttamente in /var/lib/docker, quindi un prune libera lo spazio subito e nulla del problema di TRIM qui sopra si applica. Pulizia del disco su Linux

Domande

È sicuro cancellare Docker.raw?

Non dal Finder, e non mentre Docker è in esecuzione. Quel singolo file è ogni immagine, container e volume che hai. Se vuoi davvero ripartire da zero, usa Risoluzione dei problemi → Clean / Purge data in Docker Desktop, che fa la stessa cosa in un modo che Docker conosce.

Perché docker system prune dice di aver liberato 20 GB se non è cambiato nulla?

Perché ha liberato 20 GB dentro il file system della macchina virtuale, non sul tuo Mac. Il file mantiene la sua dimensione finché il TRIM non viene eseguito e macOS non recupera i blocchi. Uscire e riaprire Docker Desktop di solito lo innesca.

docker system prune cancella i miei database?

Solo se aggiungi --volumes. Senza quel flag lascia stare i volumi. Con esso sparisce ogni volume non collegato a un container, e il volume di un database fermo conta come non collegato.

Quanto dovrebbe essere grande Docker.raw?

Non c'è una risposta giusta, ma su una macchina con qualche progetto attivo da 15 a 25 GB è normale, e 60 GB significa che la cache di build non è mai stata svuotata. Controlla con docker system df -v prima di dare per scontato che siano le immagini.