Tüm docker birimleri nasıl kaldırılır?


94

Bir yaparsam docker volume ls, cilt listem şöyle:

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

ve tüm ciltlerimi aynı anda kaldırmak istiyorum. Nasıl yapabilirim?

Yanıtlar:


194

Kullanılmayan tüm verileri (kapsayıcı olmayan birimler dahil) kaldırmak için resmi komut, docker 1.13 ile olacaktır.

docker system prune  

Yalnızca birimleri sınırlamak istiyorsanız, yalnızca kullanılmayan birimleri kaldırın :

docker volume prune

Ayrıca var docker image prune, docker container prunevs:
See daha "nde Erik kullanılmayan Docker nesneleri ".

86de7c0 ve PR 26108 işleme bakın .

Bunu play-with-docker.com'da eylem halinde görebilirsiniz :

/ # 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

Mevcut (docker öncesi 1.13) birim yönetme yöntemi PR 14242 vedocker volume Temmuz 2015 tarihli yorumunda belgeleyen komut ile tanıtıldı :

docker volume rm $(docker volume ls -q --filter dangling=true)

Bu harika, teşekkürler. Yeni prunekomutlardan haberim yoktu .
2017

3
Prune komutları harikadır, ancak bunlara dikkat edin. Görünüşe göre, onları aradığınız anda konteynerlerin çalıştığını varsayıyorlar. İlişkili olabilecek ancak aktif olarak kullanılmayan şeyleri (örneğin ağlar) temizleyerek, mevcut konteynerlerin bir sonraki başlatılışında arızalara yol açar. danglingNeyin budanmış olabileceğinden emin değilseniz filtreleri önceden kullanın :)
jocull

docker system pruneyerel birimleri kaldırmak gibi görünüyor ama değil docker volume prunedışarı sıralar
Maciek Rek

23

2017'de düzenlendi: Bu yanıt 16 Nisan 2016'da verildi ve şu anda güncel değil ve yalnızca 1.13'ten önceki docker sürümü için doğru lütfen @VonC'deki yanıtı kullanın, şimdi doğru olarak işaretlenmiştir

Kullanılmayan birimleri silmek için yerleşik docker volume rmkomutunu kullanabilirsiniz. rmKomut aynı zamanda herhangi bir dizin siler /var/lib/docker/volumes: Kaydetmek istediğiniz orada öylesine emin olun bir şey koymadı, bu bir hacim değil
Command Liste hacimleri, seninkinden daha biraz sağa:

$ docker volume ls -qf dangling=true

Temizlemek:

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

ls hakkında daha fazla ayrıntı burada , rm hakkında burada


1
--dry-runÖnce parametre ile sarkan hacimler listesini test etmeden çalıştırmazdım .
Sergei Rodionov

--dry-runSeçenek yok .
Harald Albers

1
Bu cevap, ne olursa olsun tüm ciltleri silmek istiyorsanız cevaptır. Teşekkürler!
Mücahit Yılmaz

5

Yararlı bulduğum şey bu: https://github.com/chadoe/docker-cleanup-volumes

Shellscript / var / lib / docker / volumes ve / var / lib / docker / vfs / dir Docker sürüm 1.4.1'den 1.11.x'e kadar sahipsiz docker birimlerini silmek için

Temelde öksüz / sarkan ciltleri temizler, ancak bir içerir, --dry-runancak bazı docker içeren komutları da not eder (önceki yorumda başvurulan)

Docker 1.9 ve üstü hakkında not

Docker 1.9 ve sonraki sürümlerde artık birimleri silmek için, bu docker-cleanup-volumes komut dosyası yerine yerleşik docker volume komutlarını da kullanabilirsiniz. Yerleşik komut, birim olmayan / var / lib / docker / volumes içindeki herhangi bir dizini de siler, bu nedenle oraya kaydetmek istediğiniz hiçbir şey koymadığınızdan emin olun:

Liste:

$ docker volume ls -qf dangling=true

Temizlemek:

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

Ya da işlem yapmadan daha iyi ancak Linux'a özgü bir şekilde başa çıkın:

$ docker volume ls -qf dangling=true | xargs -r docker volume rm

3

Soruyu cevaplamak ve Marc'tan ödünç almak için bu işe yarar:

$ docker volume rm $(docker volume ls -qf dangling=true | xargs)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.