Bagaimana cara menghapus semua volume buruh pelabuhan?

94

Jika saya melakukan docker volume ls, daftar volume saya adalah seperti ini:

DRIVER              VOLUME NAME
local               305eda2bfd9618266093921031e6e341cf3811f2ad2b75dd7af5376d037a566a
local               226197f60c92df08a7a5643f5e94b37947c56bdd4b532d4ee10d4cf21b27b319
...
...
local               209efa69f1679224ab6b2e7dc0d9ec204e3628a1635fa3410c44a4af3056c301

dan saya ingin menghapus semua volume saya sekaligus. Bagaimana saya bisa melakukannya?

Avara
sumber

Jawaban:

194

Perintah resmi untuk menghapus semua data yang tidak digunakan (termasuk volume tanpa kontainer) adalah dengan buruh pelabuhan 1.13

docker system prune  

Jika Anda ingin membatasi volume saja, hapus hanya volume yang tidak digunakan :

docker volume prune

Anda juga memiliki docker image prune,, docker container prunedll:
Lihat selengkapnya di " Pangkas objek Docker yang tidak digunakan ".

Lihat commit 86de7c0 dan PR 26108 .

Anda dapat melihatnya beraksi di play-with-docker.com :

/ # docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
1296a5e47ef3        hello-world         "/hello"            7 seconds ago       Exited (0) 6 seconds ago                       prickly_poincare

/ # docker system  prune
WARNING! This will remove:
        - all stopped containers
        - all volumes not used by at least one container
        - all networks not used by at least one container
        - all dangling images
Are you sure you want to continue? [y/N] y
Deleted Containers:
1296a5e47ef3ab021458c92ad711ad03c7f19dc52f0e353f56f062201aa03a35

Cara pengelolaan volume saat ini (pra-buruh pelabuhan 1.13) diperkenalkan dengan PR 14242 dan docker volumeperintah , yang mendokumentasikan dalam komentarnya dari Juli 2015:

docker volume rm $(docker volume ls -q --filter dangling=true)
VonC
sumber
Ini bagus, terima kasih. Saya tidak tahu tentang pruneperintah baru .
permukaan pohon
3
Perintah pangkas itu bagus, tetapi berhati-hatilah dengannya. Sepertinya mereka berasumsi bahwa container berjalan pada saat Anda memanggilnya. Ini akan membersihkan hal-hal yang mungkin terkait tetapi tidak aktif digunakan (misalnya jaringan) yang menyebabkan kegagalan saat kontainer yang ada dimulai. Gunakan danglingfilter sebelumnya jika Anda tidak yakin apa yang mungkin dipangkas :)
jocull
docker system prunetampaknya tidak menghapus volume lokal tetapi docker volume prunememilah-milahnya
Maciek Rek
23

Diedit pada 2017: Jawaban ini diberikan pada 16 Apr '16 dan sekarang sudah usang, dan hanya mengoreksi untuk versi buruh pelabuhan sebelum 1.13 gunakan jawaban dari @VonC, sekarang sudah ditandai benar

Untuk menghapus volume yang tidak digunakan Anda dapat menggunakan volume rmperintah buruh pelabuhan built-in . The rmperintah juga menghapus setiap direktori di /var/lib/docker/volumesyang tidak volume, jadi pastikan Anda tidak memasukkan apa pun di sana Anda ingin menyimpan:
Perintah untuk volume Daftar, sedikit yang benar dari Anda:

$ docker volume ls -qf dangling=true

Membersihkan:

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

lebih detail tentang ls di sini , tentang rm di sini

vvchik.dll
sumber
1
Saya tidak akan menjalankannya tanpa menguji daftar volume yang menggantung dengan --dry-runparameter terlebih dahulu.
Sergei Rodionov
Tidak ada --dry-runpilihan.
Harald Albers
1
jawaban ini adalah jika Anda ingin menghapus semua volume apapun yang terjadi. Terima kasih!
Mücahit Yılmaz
5

Inilah yang menurut saya berguna: https://github.com/chadoe/docker-cleanup-volumes

Shellscript untuk menghapus volume buruh pelabuhan yatim piatu di / var / lib / docker / volume dan / var / lib / docker / vfs / dir Docker versi 1.4.1 hingga 1.11.x

Ini pada dasarnya melakukan pembersihan volume yatim piatu / menggantung, tetapi itu termasuk --dry-runtetapi itu membuat catatan dari beberapa perintah yang disertakan buruh pelabuhan juga (yang direferensikan dalam komentar sebelumnya)

Catatan tentang Docker 1.9 dan yang lebih baru

Untuk menghapus volume yatim piatu di Docker 1.9 dan yang lebih baru, Anda juga dapat menggunakan perintah volume buruh pelabuhan bawaan daripada skrip volume pembersihan-buruh pelabuhan ini. Perintah bawaan juga menghapus direktori apa pun di / var / lib / docker / volumes yang bukan volume jadi pastikan Anda tidak meletakkan apa pun di sana yang ingin Anda simpan:

Daftar:

$ docker volume ls -qf dangling=true

Membersihkan:

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

Atau, menangani no-op lebih baik tetapi khusus Linux:

$ docker volume ls -qf dangling=true | xargs -r docker volume rm
Marc Young
sumber
3

Untuk menjawab pertanyaan dan meminjam dari Marc, ini berfungsi:

$ docker volume rm $(docker volume ls -qf dangling=true | xargs)
Jonathan Lin
sumber