Skip to main content
  1. Comandi/

docker volume

·3 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

Cosa fa
#

Sottocomando Docker per creare, ispezionare, listare e rimuovere volumi. I volumi sono lo storage persistente gestito da Docker.

Sintassi
#

docker volume [comando] [opzioni]

Comandi essenziali
#

ComandoFlagSignificato flagCosa fa
docker volume lsLista tutti i volumi sul sistema
docker volume inspect nomeMostra dettagli e Mountpoint fisico del volume
docker volume create nomeCrea un volume vuoto manualmente
docker volume rm nomeElimina un volume specifico
docker volume pruneElimina tutti i volumi non usati da container attivi
docker ps -a --filter volume=nome-a all, --filter filtra per criterioTrova i container che usano un volume

Combinazioni utili
#

# Trova il path fisico di un volume sull'host
docker volume inspect nome_volume | grep Mountpoint
# → "Mountpoint": "/var/lib/docker/volumes/nome_volume/_data"

# Lista volumi di un progetto specifico
docker volume ls | grep nome_progetto

# Ispeziona contenuto di un volume (richiede sudo)
sudo ls /var/lib/docker/volumes/nome_volume/_data/

Migrazione dati tra volumi
#

Quando si rinomina un progetto o si sposta un compose, il prefisso del volume cambia e i dati vanno migrati.

# 1. Crea il nuovo volume vuoto
docker volume create nuovo_volume

# 2. Sposta i dati (richiede sudo — i volumi sono di root)
sudo bash -c 'mv /var/lib/docker/volumes/vecchio_volume/_data/* /var/lib/docker/volumes/nuovo_volume/_data/'

# 3. Verifica la migrazione
sudo ls /var/lib/docker/volumes/nuovo_volume/_data/

# 4. Avvia il compose con il nuovo volume
docker compose up -d

# 5. Verifica che il servizio funzioni correttamente

# 6. Elimina il vecchio volume
docker volume rm vecchio_volume
Warning

Usa mv sul contenuto (_data/*), non sulla directory (_data/). Spostare la directory rompe il mapping interno di Docker.

Warning

Prima di eliminare un volume vecchio, verifica sempre che il servizio giri correttamente con il nuovo.

Restore di un DB da backup
#

Per verificare un backup senza toccare il DB reale:

# 1. Crea un DB temporaneo dentro il container
docker exec nome_container createdb -U utente db_test

# 2. Restore sul DB temporaneo (legge da stdin con -i)
gunzip -c backup.sql.gz | docker exec -i nome_container psql -U utente -d db_test

# 3. Verifica i dati
docker exec -it nome_container psql -U utente -d db_test -c "SELECT COUNT(*) FROM tabella;"

# 4. Elimina il DB temporaneo
docker exec nome_container dropdb -U utente db_test

Scenario Reale
#

Un servizio viene spostato su un nuovo server. Il compose era in vecchio-progetto/ e ora e in nuovo-progetto/. Docker rinomina automaticamente i volumi con il nuovo prefisso — i dati non ci sono. Si usa la procedura di migrazione per spostare i dati dal vecchio volume al nuovo prima di avviare il compose.

Collegato a
#

  • system — categoria
  • docker-volumes — concetto: tipi di volume, naming, quando usare cosa
  • docker-compose — dove i volumi vengono dichiarati

Related