डॉकर उपयोग में मात्रा में है, लेकिन डॉकटर कंटेनर नहीं हैं


166

मैं Docker 1.9.1 के साथ Docker संस्करणों को हटाने के मुद्दे पर रहा हूँ।

मैंने अपने सभी रुके हुए कंटेनरों को हटा दिया है ताकि docker ps -aखाली वापस आए।

जब मैं उपयोग करता हूं docker volume ls, तो मुझे डॉक कंटेनर की पूरी मेजबानी दी जाती है:

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

चूंकि इनमें से किसी भी वॉल्यूम में कुछ भी महत्वपूर्ण नहीं है, इसलिए मैं सभी संस्करणों को शुद्ध करने की कोशिश करता हूं docker volume rm $(docker volume ls -q)

इस प्रक्रिया में, अधिकांश हटा दिए जाते हैं, लेकिन मैं वापस आ जाता हूं:

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

उनमें से एक बड़े हिस्से के लिए। अगर मेरे पास पहले से मौजूद कोई कंटेनर नहीं है, तो इन संस्करणों का उपयोग कैसे किया जा रहा है?


7
यदि कोई वॉल्यूम अभी भी उपयोग में है, तो चेक करने के लिए डॉकिंग रेफरेंस काउंटिंग का उपयोग करता है; यह सब स्मृति में किया जाता है; यह किसी तरह बग या दौड़ की स्थिति हो सकती है, जिसके परिणामस्वरूप कंटेनर को हटा दिया गया, लेकिन काउंटर अपडेट नहीं किया जा रहा है। डेमॉन के पुनरारंभ को इसे हल करना चाहिए, लेकिन, हाँ यह संभव है कि कहीं एक बग है। क्या आपके सेटअप में कुछ खास है (जैसे आप docker-in-docker, Swarm?) का उपयोग कर रहे हैं। आप सफाई के लिए अपने कंटेनर कुछ स्क्रिप्ट या उपकरण का उपयोग करते हैं?
थज्जेजतह

5
अरे धन्यवाद @thaJeztah ने डॉकर डेमॉन ( sudo service docker stopऔर sudo service docker start) को पुनः आरंभ करते हुए मेरे लिए इन सभी भूत संस्करणों को हटा दिया। इसके अलावा, ऐसा लगता है कि मैं अब docker rm -v कमांड का उपयोग करके बिना किसी समस्या के वॉल्यूम को हटाने में सक्षम हूं। उपयोग में केवल उल्लेखनीय अंतर यह है कि मैं Ubuntu 15.10 पर docker-compose का उपयोग कर रहा हूं। अगर मैं कभी भी इस समस्या को दोहराने में सक्षम हूं, तो मैं वापस रिपोर्ट करूंगा, लेकिन ऐसा लगता है कि एक साधारण पुनरारंभ पर्याप्त होगा। धन्यवाद!
Tkwon123

2
रिबूट के बाद भी यह अभी भी कह डोकर मात्रा उपयोग में है ..
Holms

10
यदि आप docker कंपोज़ का उपयोग करते हैं, तो आप वॉल्यूम हटाने के लिए, डाउन कमांड में -v जोड़ सकते हैं।
नील्स बेच नील्सन

5
मैंने इसे डॉकटर को रोककर फिर फ़ाइल सिस्टम से वॉल्यूम को हटाने और फिर से डॉक शुरू करने के द्वारा तय किया। service docker stop && rm -rf /var/lib/docker/volumes/TheVolumIdYouWantToRemove && service docker start
19gr में 19

जवाबों:


169

Docker से संबंधित हर चीज को क्रूरता से हटाने के लिए आप इन कार्यों का उपयोग कर सकते हैं:

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)
}

आप उन्हें अपनी ~/Xrcफ़ाइल में जोड़ सकते हैं , जहाँ X आपका शेल दुभाषिया है ( ~/.bashrcयदि आप बैश का उपयोग कर रहे हैं) फ़ाइल और उन्हें निष्पादित करके पुनः लोड करें source ~/Xrc। इसके अलावा, आप बस उन्हें कॉपी कर सकते हैं कंसोल और बाद में (कार्य को तैयार करने से पहले आपने जो विकल्प लिया है, उसके बावजूद) बस चलाएं:

armageddon

यह सिर्फ सामान्य डोकर की सफाई के लिए भी उपयोगी है। कि यह भी अपने चित्र, न केवल अपने कंटेनर (या तो चल रहा है या नहीं) और किसी भी तरह के अपने संस्करणों को हटा देगा मन में है।


3
प्रश्न के अनुसार, docker volume rmकमांड विफल हो रही थी। टिप्पणियों से, समाधान संदर्भ संख्या को ठीक करने के लिए docker daemon को पुनरारंभ करने के लिए प्रतीत होता है।
BMitch

2
@BMitch यदि आप टिप्पणियों के माध्यम से ध्यान से पढ़ते हैं, तो इसका समाधान नहीं है:even after reboot it still says docker volume is in use..
डेविड गोंजालेज रुइज़

1
होम्स में एक अलग मुद्दा है और वह नहीं है जिसने प्रश्न पोस्ट किया है। ऊपर एक टिप्पणी देखिए।
15

10
Gonsales, butfor फ़ंक्शन का नाम है, लेकिन यह वर्तनी हैarmageddon
जोसेफ शीडी

1
इससे मेरी समस्या हल नहीं हुई। docker-compose down --volumesहालांकि प्रयोग किया गया (जैसा कि @Robert के। बेल द्वारा सुझाया गया है)
BiAiB

159

शायद वॉल्यूम के माध्यम से बनाया गया था docker-compose? यदि हां, तो इसे हटा दिया जाना चाहिए :

docker-compose down --volumes

नील्स Bech नीलसन को श्रेय !


3
यह काम करता है :) यह नोट करना अच्छा है कि यह सभी कंटेनरों को भी हटा देता है। यह अवांछित हो सकता है यदि आपने कंटेनर में फाइलें बदल दीं जो स्थायी माउंट पर नहीं हैं और छवि में नहीं हैं।
अलेक्जेंडर वरविज्क

58

मैं डॉकटर के लिए काफी नया हूं। मैं कुछ प्रारंभिक परीक्षण गड़बड़ी को साफ कर रहा था और एक वॉल्यूम भी नहीं निकाल पा रहा था। मैंने सभी चल रहे उदाहरणों को रोक दिया था, एक प्रदर्शन किया docker rmi -f $(docker image ls -q), लेकिन अभी भी प्राप्त किया Error response from daemon: unable to remove volume: remove uuid: volume is in use

मैंने किया था docker system pruneऔर अंतिम खंड को हटाने के लिए जो आवश्यक था उसे साफ किया:

[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

क्लाइंट और डेमन एपीआई दोनों को इस कमांड का उपयोग करने के लिए कम से कम 1.25 होना चाहिए। docker versionअपने क्लाइंट और डेमन एपीआई संस्करणों की जांच करने के लिए क्लाइंट पर कमांड का उपयोग करें ।


किसी कारण से मुझे यह काम करने से पहले दो बार करना पड़ा।
mameluc

1
मुझे "docker system prune" और फिर "docker volume rm volume_name" करना था। किसी कारण के लिए, पहले से हटाए गए कंटेनरों को मैंने पहले ही हटा दिया था। उलझन में है
मैथ्यू राइडआउट

54

वॉल्यूम एक रोका कंटेनरों द्वारा उपयोग में हो सकता है। आप ऐसे कंटेनरों को कमांड द्वारा हटा सकते हैं:

docker container prune

तब आप उपयोग नहीं किए गए वॉल्यूम को निकाल सकते हैं

docker volume prune

1
यह स्वीकृत उत्तर होना चाहिए, पता नहीं क्यों लोगों को दिया गया उत्तर पसंद है
एल्गर मेंसोनिड्स

9

जब तक वॉल्यूम कंटेनर (या तो चल रहा है या नहीं) के साथ जुड़ा हुआ है, उन्हें हटाया नहीं जा सकता।

आपको दौड़ना होगा

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

प्रत्येक चल रहे / नॉन-रनिंग कंटेनरों पर जहाँ यह वॉल्यूम बढ़ सकता है।

यदि वॉल्यूम किसी एक कंटेनर पर रखा गया है, तो आपको इसे निरीक्षण कमांड आउटपुट के माउंट अनुभाग में देखना चाहिए । कुछ इस तरह :-

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

जिम्मेदार कंटेनर का पता लगाने के बाद, उपयोग करें: -

docker rm -f container-1 container-2 ...container-n कंटेनर चलाने के मामले में

docker rm container-1 container-2 ...container-n न चलने वाले कंटेनरों के मामले में

पूरी तरह से मेजबान मशीन से कंटेनरों को हटाने के लिए।

फिर कमांड का उपयोग करके वॉल्यूम हटाने का प्रयास करें: -

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


1
एक उपयोगी उत्तर के लिए इस प्रतिक्रिया को बढ़ाया जाना चाहिए। इसे कैसे जांचना है, इस पर जानकारी जोड़ें।
जोरेन हीयर

1
मुझे यकीन docker container pruneहै कि ज्यादातर मामलों में पर्याप्त होना चाहिए।
x- यूरी

6

वर्तमान में आप एक सामान्य और अधिक संपूर्ण सफाई के लिए क्या कर सकते हैं

docker system prune

इसके अलावा किसी भी बंद किए गए कंटेनर और सभी अप्रयुक्त छवियों को हटा दें (केवल झूलने वाले चित्र नहीं), -aकमांड में ध्वज जोड़ें :

docker system prune -a

3

मुझे पूरा यकीन है कि आपके सिस्टम पर वास्तव में उन संस्करणों को रखा गया है। / Proc / mounts में देखें और आप उन्हें वहां देखेंगे। आप की आवश्यकता होगी sudo umount <path>या sudo umount -f -n <path>। आपको घुड़सवार पथ को / proc / mounts या के माध्यम से प्राप्त करने में सक्षम होना चाहिएdocker volume inspect


-3

आपको इस कमांड को फ्लैग -फ (बल) के साथ टाइप करना चाहिए:

sudo docker volume rm -f <VOLUME NAME>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.