2015-01-07 36 views
59

Ho appena ispezionato la mia cartella/var/lib/finestra mobile/volumi e ha scoperto che è piena di cartelle denominate come Docker UUID ognuna delle quali contiene un file config.json con contenuti lungo le linee diOrfano Docker ha montato i volumi host?

{"ID":"UUID","Path":"/path/to/mounted/volume","IsBindMount":true,"Writable":true} 

dove

/path/to/mounted/volume 

è il percorso della cartella sull'host che è stato montato su un contenitore finestra mobile con l'opzione -v in un determinato momento. Ho cartelle simili che risalgono all'inizio dei miei esperimenti con Docker, ovvero circa 3 settimane fa.

I contenitori in questione sono stati arrestati e la finestra mobile è stata richiamata molto tempo fa, quindi non riesco a vedere che le voci non superino la data di scadenza. Questo solleva la domanda - è il caso che io veda un bug o si debba scartare manualmente tali voci da/var/lib/docker/volumi?

risposta

133

Per Docker 1.9 e fino c'è un modo nativo:

elenco di tutti i volumi orfani con

$ docker volume ls -qf dangling=true

eliminare tutti loro con

$ docker volume rm $(docker volume ls -qf dangling=true)

+1

Il mio cliente stampa ogni nome di volume su una nuova riga, quindi questo comando rimuove solo il primo volume e considera ciascun volume come un comando. Ho usato 'sed' per rimuovere le nuove righe: ' volume finestra mobile rm $ (volume finestra mobile ls -qf dangling = true | sed ': a; N; $! Ba; s/\ n// g') ' – emc

+0

@ emc, per alcuni, un ciclo for può essere più leggibile rispetto all'utilizzo di sed: 'for v in $ (volume docker ls -qf dangling = true); do docker volume rm "$ v"; fatto; ' – Kevin

+1

@Kevin Xargs è anche abbastanza leggibile:' volume finestra mobile ls -qf 'dangling = true' | xargs docker volume rm' – emc

28

Dal manuale d'uso Docker:

Se si rimuovono i contenitori che montano i volumi, tra cui il primo contenitore dbdata, o il successivo contenitori DB1 e DB2, non verranno eliminati i volumi. Per eliminare il volume dal disco, è necessario chiamare esplicitamente docker rm -v rispetto all'ultimo contenitore con un riferimento al volume. Ciò consente di aggiornare o migrare efficacemente i volumi di dati tra i contenitori. - source

Questo è un comportamento intenzionale per evitare la perdita accidentale dei dati. È possibile utilizzare uno strumento come docker-cleanup-volumes per pulire i volumi inutilizzati.

+3

Sì. Fastidioso, non è vero? Penso che otterremo presto altri strumenti per gestire i volumi. –

+0

In particolare se improvvisamente trovi il disco pieno e stai cercando di entrare nella macchina nativa della finestra mobile su un Mac. –

6

Per Docker 1.13+ e i numeri di versione ce/ee 17+, utilizzare volume prune command

docker volume prune 

A differenza della query dangling=true, questo non rimuoverà i volumi basati su driver "remoti".

Problemi correlati