# Pulire Docker sul Mac senza perdere dati

> Ispeziona immagini, container, cache di build e volumi con stato prima del prune, poi misura separatamente l’allocazione del disco sparse.

Published: 2026-06-26 | Updated: 2026-08-08

Docker Desktop può occupare decine di gigabyte perché immagini, layer scrivibili dei
container, cache di build e volumi vivono all'interno di un disco virtuale Linux. Queste
categorie non sono tutte ugualmente eliminabili. La cache di build di solito è
riproducibile; un volume di database può essere l'unica copia di dati importanti. Una
pulizia sicura parte dall'inventario di Docker, non dal comando di prune più ampio.

## Perché lo spazio di Docker non torna subito

Docker Desktop su macOS esegue una VM Linux e di norma conserva i dati in un disco
virtuale sparso chiamato `Docker.raw`. La
[guida allo storage su Mac](https://docs.docker.com/desktop/troubleshoot-and-support/faqs/macfaqs/#where-does-docker-desktop-store-linux-containers-and-images)
di Docker indica **Docker Desktop > Settings > Resources > Advanced** per posizione,
limite del disco e spazio effettivamente consumato. Spostalo da lì, non da Finder. Un
file sparso ha una dimensione logica massima e un'allocazione fisica minore, quindi
`ls -lh` da solo può farlo sembrare molto più grande della capacità che occupa in quel
momento.

Controlla cosa Docker stesso ritiene di stare usando:

```
docker system df -v
```

La vista dettagliata scompone immagini, container, volumi locali e cache di build.
"Reclaimable" significa che Docker non vede un riferimento corrente che richieda
l'oggetto; non dimostra che non ti servirà domani un container fermato, un'immagine
vecchia o un volume. Controlla anche `docker ps -a` e `docker volume ls` prima di fare
prune.

## Parti da una pulizia mirata

Recupera sempre spazio da dentro Docker, non cancellando il file del disco virtuale.
Inizia dalla categoria che conosci:

```
docker builder prune --filter until=168h
docker image prune
docker container prune
```

Il primo comando rimuove la cache di build più vecchia di sette giorni; regola l'età in
base al tuo lavoro. I due successivi chiedono conferma prima di rimuovere immagini
dangling e container fermati. Riesegui `docker system df -v` dopo ogni passo per vedere
quale azione ha contato.

La [guida al pruning](https://docs.docker.com/engine/manage-resources/pruning/) di
Docker documenta `docker system prune` come comando di comodo più ampio. Aggiungere
`-a` rimuove tutte le immagini non usate, non solo i layer dangling. Aggiungere
`--volumes` estende l'operazione ai volumi anonimi non usati, che possono contenere
file di database o altro stato. Non usare `docker system prune -a --volumes` come
comando di pulizia predefinito. Prima di qualsiasi prune sui volumi, ispeziona nomi e
proprietà:

```
docker volume ls
docker volume inspect <volume-name>
```

I volumi creati da Compose di solito portano etichette di progetto e servizio.
Identifica il progetto proprietario ed esporta o fai backup dei dati che non si possono
ricostruire prima di rimuovere il volume.

## Recuperare lo spazio dell'immagine disco

Dopo un prune, i blocchi liberi esistono nel filesystem Linux prima che macOS li
riceva necessariamente dal disco sparso. La documentazione attuale di Docker dice che
un'immagine `Docker.raw` di solito restituisce lo spazio host idoneo in pochi secondi;
le immagini `Docker.qcow2` più vecchie usano un processo in background che può
impiegare minuti. Misura di nuovo l'uso reale del disco invece di giudicare dal
massimo logico del file. Un factory reset non è una compattazione: distrugge container
locali, immagini, volumi e impostazioni. Usalo solo quando quella perdita completa è
intenzionale e i dati importanti dei volumi sono stati esportati.

## Dietro le quinte: perché il file cresce e non si riduce

Docker Desktop esegue una VM Linux, e `Docker.raw` è il disco virtuale di quella VM: un
file sparso che cresce quando il guest scrive ma non restituisce automaticamente
spazio a macOS quando il guest cancella. Rimuovere un'immagine marca i blocchi come
liberi nel filesystem della VM, ma il file host si riduce solo se il guest emette
TRIM/discard e Docker Desktop può usare discard e compattazione per restituire i
blocchi idonei. I tempi dipendono dalla versione e dall'implementazione dell'immagine
disco. Ecco perché una pulizia logica e il cambio di capacità a livello host vanno
misurati separatamente, e perché cancellare il file host equivale a distruggere
l'intero ambiente Docker.

<figure class="blog-diagram">
  <img src="https://mole.fit/img/blog/docker-raw-growth.webp" width="1360" height="454" loading="lazy" alt="Un file Docker.raw sparse cresce mentre la VM guest scrive e può restituire a macOS i blocchi idonei tramite discard e compaction">
  <figcaption>Cancellare un oggetto Docker libera prima spazio nella VM. Restituire l'allocazione fisica a macOS è un passo separato del disco sparso.</figcaption>
</figure>

## Dove una mappa del disco aiuta

Una mappa del disco come la vista Analyze di [Mole](https://mole.fit/) può mostrare il disco virtuale e
la sua impronta fisica. La CLI di Docker deve decidere quali oggetti interni sono
referenziati. Le due viste rispondono a domande diverse: macOS mostra dove è allocata
la capacità, mentre Docker spiega cosa contiene quell'allocazione.

## Un ordine di operazioni sicuro

Esegui `docker system df -v`, individua progetti vecchi e volumi con stato, esporta i
dati unici e fai prune una categoria alla volta. Ricontrolla sia i totali interni di
Docker sia la capacità fisica di macOS. Usa i flag di prune ampi solo dopo averne
esaminato lo scope esteso, e non usare mai un factory reset come scorciatoia di routine
per recuperare spazio. Il guadagno sicuro più rapido di solito è la cache di build
vecchia, non volumi sconosciuti.

---

Canonical HTML page: https://mole.fit/it/blog/how-to-clean-up-docker-mac
Blog index for agents: https://mole.fit/it/blog/llms.txt
Site index for agents: https://mole.fit/llms.txt
