Docker kullanımda, ancak Docker kapları yok


167

Docker 1.9.1 ile Docker birimlerini kaldırmayla ilgili sorunlar yaşıyorum.

docker ps -aBoş duran tüm durdurulmuş kaplarımı kaldırdım .

Kullandığımda bana docker volume lsbir sürü Docker kapsayıcısı verildi:

docker volume ls
DRIVER              VOLUME NAME
local               a94211ea91d66142886d72ec476ece477bb5d2e7e52a5d73b2f2f98f6efa6e66
local               4f673316d690ca2d41abbdc9bf980c7a3f8d67242d76562bbd44079f5f438317
local               eb6ab93effc4b90a2162e6fab6eeeb65bd0e4bd8a9290e1bad503d2a47aa8a78
local               91acb0f7644aec16d23a70f63f70027899017a884dab1f33ac8c4cf0dabe5f2c
local               4932e2fbad8f7e6246af96208d45a266eae11329f1adf176955f80ca2e874f69
local               68fd38fc78a8f02364a94934e9dd3b5d10e51de5b2546e7497eb21d6a1e7b750
local               7043a9642614dd6e9ca013cdf662451d2b3df6b1dddff97211a65ccf9f4c6d47
#etc x 50

Bu ciltlerin hiçbiri önemli bir şey içermediğinden, tüm birimleri temizlemeye çalışıyorum docker volume rm $(docker volume ls -q).

Bu süreçte çoğunluk kaldırılır, ancak geri dönüyorum:

Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use

Bunların büyük bir kısmı için. İlk etapta hiç kabım yoksa, bu hacimler nasıl kullanılıyor?


7
docker, bir birimin hala kullanımda olup olmadığını kontrol etmek için referans sayımı kullanır; bunların hepsi bellekte yapılır; bu bir şekilde bir hata veya yarış durumu olabilir, bu da kabın kaldırılmasına neden oldu, ancak sayaç güncellenmedi. Arka plan programının yeniden başlatılması bunu çözmelidir, ancak evet bir yerde bir hata olabilir. Kurulumunuzda özel bir şey var mı (örn. Docker-in-docker kullanıyor musunuz, Swarm?). Kapsayıcılarınızı temizlemek için bir komut dosyası veya araç kullanıyor musunuz?
thaJeztah

5
Hey teşekkürler @thaJeztah Docker cinini yeniden başlatırken ( sudo service docker stopve sudo service docker start) benim için tüm bu hayalet hacimlerini temizledi. Ayrıca, artık docker rm -v komutunu kullanarak birimleri sorunsuz bir şekilde kaldırabiliyorum gibi görünüyor. Kullanımdaki önemli farklılıklar Ubuntu 15.10'da docker-compose kullanıyorum. Bu sorunu tekrarlayabiliyorsam rapor edeceğim, aksi takdirde basit bir yeniden başlatma yeterli olacaktır. Teşekkürler!
Tkwon123

2
yeniden
başlattıktan

10
Docker compose kullanıyorsanız, birimleri kaldırmak için down komutuna -v ekleyebilirsiniz.
Niels Bech Nielsen

5
Docker'ı durdurup ardından dosya sistemindeki birimleri kaldırarak ve docker'ı tekrar başlatarak bunu düzelttim. service docker stop && rm -rf /var/lib/docker/volumes/TheVolumIdYouWantToRemove && service docker start
jfgrissom

Yanıtlar:


169

Docker ile ilgili her şeyi acımasızca kaldırmak için bu işlevleri kullanabilirsiniz:

removecontainers() {
    docker stop $(docker ps -aq)
    docker rm $(docker ps -aq)
}

armageddon() {
    removecontainers
    docker network prune -f
    docker rmi -f $(docker images --filter dangling=true -qa)
    docker volume rm $(docker volume ls --filter dangling=true -q)
    docker rmi -f $(docker images -qa)
}

Bunları ~/Xrcdosyanıza ekleyebilirsiniz ; burada X, kabuk yorumlayıcınız ( ~/.bashrcbash kullanıyorsanız) ve yürüterek yeniden yükleyebilirsiniz source ~/Xrc. Ayrıca, bunları konsola kopyalayıp yapıştırabilirsiniz ve daha sonra (işlevleri hazır hale getirmek için daha önce aldığınız seçeneğe bakılmaksızın) çalıştırın:

armageddon

Ayrıca genel Docker temizliği için de yararlıdır. Bunun, yalnızca kaplarınızı (çalışıyor olsun ya da olmasın) ve herhangi bir türdeki hacimlerinizi değil, resimlerinizi de kaldıracağını unutmayın.


3
Soru başına, docker volume rmkomut başarısız oldu. Yorumlardan çözüm, başvuru sayısını düzeltmek için docker arka plan programını yeniden başlatmak gibi görünüyor.
BMitch

2
@BMitch'i yorumları dikkatlice okursanız, bunun çözümü bu değildir:even after reboot it still says docker volume is in use..
David González Ruiz

1
holms'un farklı bir sorunu var gibi görünüyor ve soruyu yayınlayan kişi değil. Bunun üzerinde bir yorum bulun.
BMitch

10
Gonsales, function işlev adı için ama yazıldığındanarmageddon
Joseph Sheedy

1
Bu benim sorunumu çözmedi. docker-compose down --volumesYine de kullanmak (@Robert K. Bell tarafından önerildiği gibi)
BiAiB


58

Docker için oldukça yeniyim. İlk test karmaşasını temizliyordum ve bir birimi de kaldıramadım. Çalışan tüm örnekleri durdurmuş, a gerçekleştirmiştim docker rmi -f $(docker image ls -q), ancak yine deError response from daemon: unable to remove volume: remove uuid: volume is in use .

Ben yaptım docker system pruneve son hacmi kaldırmak için ne ihtiyaç vardı temizledik:

[0]$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
... about 15 containers UUID's truncated

Total reclaimed space: 2.273MB
[0]$ docker volume ls
DRIVER              VOLUME NAME
local              uuid
[0]$ docker volume rm uuid
uuid
[0]$

docker system prune

Bu komutu kullanabilmek için istemci ve arka plan programı API'sının en az 1.25 olması gerekir. docker versionİstemci ve arka plan programı API sürümlerinizi kontrol etmek için istemcideki komutu kullanın .


bazı nedenlerden dolayı bunu işe yaramadan önce iki kez yapmak zorunda kaldım.
mameluc

1
"Docker sistem kuru erik" ve sonra "docker birim rm birim_adı" yapmak zorunda kaldı. Herhangi bir nedenle, daha önce sildiğim silinmiş kapları budamak. şaşkın .
Matthew Rideout

54

Hacim, durdurulan kaplardan biri tarafından kullanılıyor olabilir. Bu tür kapları komutla kaldırabilirsiniz:

docker container prune

kullanılmayan hacimleri kaldırabilirsiniz

docker volume prune

1
bu kabul edilen cevap olmalı, insanlar neden verilen cevabı
seviyorlar

9

Birimler bir kapla ilişkili olduğu sürece (çalışıyor olsun ya da olmasın), çıkarılamazlar.

Koşmalısın

docker inspect <container-id>/<container-name>

bu birimin monte edilmiş olabileceği çalışan / çalışmayan kapların her birinde.

Birim kaplardan herhangi birine monte edilmişse, incelemek komut çıkışının Bağlar bölümünde görmelisiniz . Böyle bir şey: -

"Mounts": [
            {
                "Type": "volume",
                "Name": "user1",
                "Source": "/var/lib/docker/volumes/user1/_data",
                "Destination": "/opt",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

Sorumlu konteyner (ler) i bulduktan sonra, şunları kullanın: -

docker rm -f container-1 container-2 ...container-n akan konteynerlerde

docker rm container-1 container-2 ...container-n akmayan konteynerlerde

kapları ana makineden tamamen çıkarmak için.

Ardından şu komutu kullanarak birimi kaldırmayı deneyin: -

docker volume remove <volume-name/volume-id>


1
Yararlı bir cevap için bu reaksiyonun uzatılması gerekir. Bunu nasıl kontrol edeceğiniz hakkında bilgi ekleyin.
Jeroen Heier

1
Bahse girerim docker container pruneçoğu durumda yeterli olmalı.
x-yuri

6

Şu anda genel ve daha eksiksiz bir temizlik için liman işçisinin sunduğu ürünleri kullanabilirsiniz:

docker system prune

Durdurulmuş kapsayıcıları ve kullanılmayan tüm görüntüleri (yalnızca sarkan görüntüler değil) ek olarak kaldırmak için -abayrağı komuta ekleyin :

docker system prune -a

3

Bu birimlerin aslında sisteminize monte edildiğinden eminim. / Proc / mount'lara bakın ve onları orada göreceksiniz. Muhtemelen sudo umount <path>ya da gerekecektir sudo umount -f -n <path>. Bağlanan yolu / proc / bağlarda veya içinden elde edebilmelisinizdocker volume inspect


-3

Bu komutu flag -f (force) ile yazmalısınız:

sudo docker volume rm -f <VOLUME NAME>

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.