मैं डॉकर की छवियां कैसे हटा सकता हूं?


265

मेरे पास निम्न चित्र हैं:

alex@alexvps:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              70c0e19168cf        5 days ago          1.069 GB
<none>              <none>              c2ce80b62174        8 days ago          399.2 MB
<none>              <none>              60afe4036d97        8 days ago          325.1 MB

और जब मैं उनमें से एक को निकालने की कोशिश करता हूं:

alex@alexvps:~$ sudo docker rmi 60afe4036d97
Error: Conflict, 60afe4036d97 wasn't deleted
2014/01/28 00:54:00 Error: failed to remove one or more images

मै उन्हे कैसे हटा सकता हूँ? ऐसा संघर्ष क्यों है?

जवाबों:


478

सभी छवियों को हटाने के लिए, दिए गए कमांड का उपयोग करें

docker rmi $(docker images -q)

सभी कंटेनरों को हटाने के लिए, दिए गए कमांड का उपयोग करें

docker rm $(docker ps -a -q)

चेतावनी: यह आपकी सभी छवियों और कंटेनरों को नष्ट कर देगा। उन्हें बहाल करना संभव नहीं होगा!

यह समाधान Techoverflow.net द्वारा प्रदान किया गया है


17
सरल और सीधे। इसके अलावा, आप छवियों को हटाने के लिए मजबूर करने के लिए आदेश देते हैं। 'docker rmi -f $ (
docker

37
विंडोज़ docker images -q | %{docker rmi -f $_}
पॉवरशेल

1
पहले मैंने कुछ छवियों को हटाने के अनलॉक करने के लिए @muheed How to Answer ( stackoverflow.com/a/30475249/2747020 ) पर cmd का उपयोग किया :sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}
Razec Luar

1
डॉकटर कंटेनर के लिए विंडोज पॉवर्सशेलdocker ps -a -q | %{docker rm -f $_}
डेक्सटर

1
नीचे @ alexyz78 नोट्स के रूप में, अब आप उपयोग कर सकते हैं docker system prune। तो हर एक को पोंछने के लिए: docker kill $(docker ps -q)कंटेनरों को रोकने के docker system prune -aलिए सब कुछ हटा दिया जाएगा - देखें stackoverflow.com/a/44309011/247708
Bharat

101

संभावित कारण: कारण यह हो सकता है कि इस छवि का उपयोग वर्तमान में चल रहे कंटेनर द्वारा किया जाता है। ऐसे मामले में, आप रनिंग कंटेनरों को सूचीबद्ध कर सकते हैं, संबंधित कंटेनर को रोक सकते हैं और फिर छवि को हटा सकते हैं:

docker ps
docker stop <containerid>
docker rm <containerid>
docker rmi <imageid>

यदि आप docker ps द्वारा कन्टेनर नहीं ढूँढ सकते हैं, तो आप इसका उपयोग सभी पहले से मौजूद कंटेनरों को सूचीबद्ध करने और उन्हें हटाने के लिए कर सकते हैं।

docker ps -a | grep 60afe4036d97
docker rm <containerid>

नोट: यदि आप कंटेनर का उपयोग करते हैं तो एक बार में सभी बाहर के कंटेनरों को हटाने से सावधान रहेंVolume-Only । ये Exitराज्य में रहते हैं, लेकिन उपयोगी डेटा होते हैं


वास्तव में, आपको एक संदेश मिलेगा जो निर्दिष्ट करेगा। शायद एक और छवि इस पर आधारित है? पहले इस छवि से आपके द्वारा बनाई गई किसी भी छवि को निकालने का प्रयास करें।
qkrijger

12
मैं के साथ छवि को दूर करने में सक्षम था sudo docker ps -a | grep Exit | awk '{print $1}' | sudo xargs docker rm(करने के लिए धन्यवाद github.com/dotcloud/docker/issues/3258 ) और फिर साथsudo docker rmi 70c0e19168cf
alexyz78

2
Exitराज्य में छवियों को हटाने से सावधान रहें । यदि आप डेटा वॉल्यूम-केवल कंटेनरों का उपयोग कर रहे हैं तो वे चालू नहीं रहते हैं।
ऐसोफस्पेड्स

1
awk grep कर सकते हैं:awk '/Exit/ {print $1}'
ड्वाइट स्पेंसर

आपकी आज्ञा इसे फेंक देते हैं Error response from daemon: No such container: ...। यह बताना मुश्किल है कि क्या प्रतिस्थापित किया जाना चाहिए, और मुझे क्या बदलना चाहिए। उपयोग न करें...
फेलो विल्च

60

त्रुटि का कारण यह है कि भले ही छवि में कोई टैग नहीं था, फिर भी उस छवि पर एक कंटेनर मौजूद है जो exitedराज्य में हो सकता है । इसलिए आपको यह सुनिश्चित करने की आवश्यकता है कि आपने उन छवियों पर बनाए गए सभी कंटेनरों को रोक दिया और हटा दिया है। निम्नलिखित आदेश उन सभी कंटेनरों को हटाने में आपकी सहायता करता है जो नहीं चल रहे हैं:

docker rm `docker ps -aq --no-trunc --filter "status=exited"`

अब यह सभी गैर-मध्यवर्ती <none>छवियों को हटा देता है :

docker rmi `docker images --filter 'dangling=true' -q --no-trunc`

नोट: सभी चल रहे कंटेनरों को बंद करने के लिए:

docker stop `docker ps -q`

1
इसके लिए धन्यवाद, मैंने इसे सबसे स्वच्छ कार्यान्वयन पाया।
जोसेफ सॉयर

7
यदि आपके पास डेटा वॉल्यूम कंटेनर हैं, तो सावधान रहें क्योंकि उनके पास "स्थिति = बाहर" है। इसका मतलब है कि आप अपना सारा डेटा खो देंगे।
जोहान

19

छवि वर्तमान में एक चल रहे कंटेनर द्वारा उपयोग की जा सकती है, इसलिए आपको पहले कंटेनर को रोकना और निकालना होगा।

docker stop <container-name>
docker rm <container-id>

तब आप छवि को हटाने का प्रयास कर सकते हैं:

docker rmi <image-id>

आपको यह सुनिश्चित करना चाहिए कि यह छवि अन्य छवियों पर निर्भर नहीं करती है (अन्यथा आपको उन्हें पहले हटाना होगा)।

मेरे पास एक अजीब मामला था जिसमें मेरे पास अब भी जीवित नहीं (और docker ps -aकुछ भी नहीं) कंटेनर थे, लेकिन मैं छवि और इसकी छवि-निर्भरता को हटाने का प्रबंधन नहीं कर सका।

इन विशेष मामलों को हल करने के लिए आप इसके साथ छवि को हटाने के लिए मजबूर कर सकते हैं:

docker rmi -f <image-id>

19

बैश में:

for i in `sudo docker images|grep \<none\>|awk '{print $3}'`;do sudo docker rmi $i;done

यह "<none>" नाम से सभी छवियों को हटा देगा। मुझे वे चित्र निरर्थक लगे।


3
इस सवाल का जवाब नहीं है, लेकिन यह अभी भी बहुत उपयोगी है। धन्यवाद।
द्विवेदीयर

5
इस आदेश को सरल बनाएं docker images|grep \<none\>|awk '{print $3}' | xargs docker rmi, इसके लिए sudoअनुमति की आवश्यकता हो सकती है
लैरी कै

15

मुझे इस आदेश में उत्तर मिला:

docker images --no-trunc | grep none | awk '{print $3}' | xargs docker rmi

मुझे आपकी समस्या तब हुई जब मैंने उपयोग की जा रही कुछ छवियों को हटा दिया, और मुझे एहसास नहीं हुआ (उपयोग करते हुए docker ps -a)।


9

चूंकि डॉकर वर्। 1.13.0 (जनवरी 2017) system pruneकमांड है:

$ docker system prune --help

Usage:  docker system prune [OPTIONS]

Remove unused data

Options:
-a, --all     Remove all unused images not just dangling ones
-f, --force   Do not prompt for confirmation
    --help    Print usage

7

सनी के जवाब के अलावा:

PowerShell विंडो में विंडोज मशीन पर सभी छवियों को हटाने के लिए (विंडोज के लिए डॉकर के साथ), करें:

docker images -q | %{docker rmi -f $_}

PowerShell विंडो में विंडोज मशीन (विंडोज के लिए डॉकर के साथ) पर सभी कंटेनरों को हटाने के लिए, करें:

docker ps -a -q | %{docker rm -f $_}

6

सबसे पहले, निम्नलिखित आदेश का उपयोग करके सभी कंटेनरों को हटा दें

sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}

फिर, निम्नलिखित कमांड का उपयोग करके इसकी आईडी द्वारा छवि को हटा दें

sudo docker rmi <image-id>

यह ध्यान देने योग्य है कि यह कुछ के लिए स्पष्ट नहीं है कि यह सभी रनिंग डॉकटर कंटेनर को हटा देगा।
माइकल जूनियर


4

सभी कंटेनरों को हटा दें

docker ps -q -a | xargs docker rm

फोर्स ने सभी डॉकरों के चित्र हटा दिए

docker rmi -f $(docker images -f dangling=true -q)

4

बस आप --forceकमांड के अंत में एड कर सकते हैं । पसंद:

sudo docker rmi <docker_image_id> --force

इसे और अधिक बुद्धिमान बनाने के लिए आप इसे इस प्रकार जोड़ सकते हैं:

sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')

sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')

sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}') --force

यहां docker ps$ 1 में पहला कॉलम यानी डॉकटर कंटेनर आईडी है।

और docker images$ 3 तीसरा कॉलम है, यानी डॉकर इमेज आईडी।


3

सभी असंबद्ध छवियों को हटाने के लिए एक कमांड का सबसे कॉम्पैक्ट संस्करण है:

docker rmi $(docker images | grep "^<none>" | awk '{print $"3"}')

3

कुछ डॉकर छवि को हटाने के लिए आपको निम्नलिखित कमांड को निष्पादित करना होगा:

$ docker rmi <docker_image_id>

इसलिए, सभी डॉकर चित्रों को हटाने के लिए आप निम्नलिखित कमांड को निष्पादित कर सकते हैं:

$ docker rmi $(docker images -q)

अब, यदि आप सभी डॉकरों की छवियों को हटाना चाहते हैं (चित्रों में जो उपयोग में हैं), आप ध्वज को जोड़ सकते हैं -f, उदाहरण के लिए:

$ docker rmi -f $(docker images -q)

3

उपयोग

docker image prune -all

या

docker image prune -a

सभी झूलने वाली छवियां निकालें। यदि -aनिर्दिष्ट किया गया है, तो यह किसी भी कंटेनर द्वारा संदर्भित नहीं की गई सभी छवियों को भी हटा देगा।

नोट: आपको कुछ भी हटाने से पहले आपको पुष्टि के लिए संकेत दिया जाता है, लेकिन आपको संभावित रूप से हटाए जाने की सूची नहीं दिखाई जाती है। इसके अलावा, docker image lsनकारात्मक फ़िल्टरिंग का समर्थन नहीं करता है, इसलिए यह भविष्यवाणी करना मुश्किल है कि वास्तव में क्या छवियां हटा दी जाएंगी।

जैसा कि प्रून के लिए डॉकर के प्रलेखन के तहत कहा गया है ।


1

यदि आप स्वचालित रूप से / समय-समय पर बाहर निकलने वाले कंटेनरों को साफ करना चाहते हैं और उन छवियों और संस्करणों को हटाते हैं जो एक चल रहे कंटेनर द्वारा उपयोग नहीं किए जाते हैं तो आप डॉकर छवि डाउनलोड कर सकते हैं meltwater/docker-cleanup

इस तरह आपको इसे हाथ से साफ करने की जरूरत नहीं है।

बस दौडो:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

यह हर 30 मिनट (या फिर जब तक आप इसे DELAY_TIME = 1800 विकल्प का उपयोग करके सेट करते हैं) और बाहर निकलने वाले कंटेनरों और छवियों को साफ करेंगे।

अधिक जानकारी: https://github.com/meltwater/docker-cleanup/blob/master/README.md


0

मुझे Powershell स्क्रिप्ट के साथ एक समाधान मिला है जो इसे मेरे लिए करेगा।

स्क्रिप्ट पहले सभी कंटेनरों को रोकने के बजाय सभी कंटेनरों को हटाती है और फिर उन छवियों को हटा देती है जो उपयोगकर्ता द्वारा नामित की जाती हैं।

यहां देखें http://www.devcode4.com/article/powershell-remove-docker-containers-and-images

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