मैं डॉक छवियों के सभी संस्करणों को उन नामों से हटाना चाहता हूं जिनमें दिए गए स्ट्रिंग ( imagename) हैं।
मैंने नीचे कोशिश की है, लेकिन यह काम नहीं करता है:
docker images | grep 'imagename' | xargs -I {} docker rmi
मैं डॉक छवियों के सभी संस्करणों को उन नामों से हटाना चाहता हूं जिनमें दिए गए स्ट्रिंग ( imagename) हैं।
मैंने नीचे कोशिश की है, लेकिन यह काम नहीं करता है:
docker images | grep 'imagename' | xargs -I {} docker rmi
जवाबों:
निम्नलिखित प्रयास करें:
docker rmi $(docker images |grep 'imagename')
विंडोज पॉवर्सशेल:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
docker images |grep 'imagename'
थोड़ा और अधिक सटीक संस्करण - केवल रिपॉजिटरी नाम पर ग्रीपिंग:
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker images --format '{{.Repository}}:{{.Tag}}आउटपुट को फ़िल्टर करता है इसलिए केवल रेपो और टैग दिखाए जाते हैं (यानी foo:latest)। grep 'imagenameउन पंक्तियों को केवल उन्हीं चित्रों को फ़िल्टर करता है जिनमें सम्मिलित हैं imagename। यह कहते हुए कि $()मूल्यांकन करता है कि बाहरी में गुजरता है और docker rmiउन छवियों को निकालता है जो मिलान किए गए थे।
docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker imagesवास्तव में फ़िल्टर करने के लिए छवि नाम के रूप में पहले स्थितीय तर्क का उपयोग करता है। कोई grep और awk की आवश्यकता नहीं है। -qविकल्प केवल मिलान छवियों आईडी जो को खिलाया जा सकता वापस आ जाएगी docker rmi।
docker rmi --force $(docker images -q 'imagename' | uniq)
uniqमामले में आप एक ही छवि अलग ढंग से टैग किए गए डुप्लिकेट निकालने के लिए आवश्यक है,।
बस आप --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 1 स्तंभ यानी डोकर कंटेनर आईडी है और $ 3 3 स्तंभ यानी डोकर छवि आईडी है
मुझे अपना उत्तर अधिक सरल लगता है।
उदाहरण के लिए, आपकी छवि का नाम है python_image।
फिर आपका कोड होना चाहिए :
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
आशा है कि ये आपकी मदद करेगा।
मुझे एक और संक्षिप्त जवाब भी मिला। एकमात्र बदलाव अनावश्यक -I {}ध्वज को हटाना था ।
docker images | grep 'imagename' | xargs docker rmi
docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`
यह "इमेजनेम" नाम से सभी छवियों को हटा देगा। कुछ मामलों में यह "एक या अधिक रिपॉजिटरी में छवि संदर्भित है" जैसी त्रुटि दे सकता है। उस स्थिति में बल हटाने का उपयोग करें।
docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`
एक और तरीका हो सकता है:
docker images | awk '{ OFS = ":" }$1 ~ /imageName/ {print $1,$2}'
किसी कारण से मैं यहाँ दिए गए किसी भी उत्तर का उपयोग करने में सक्षम नहीं था। यहाँ मेरे लिए क्या काम किया है।
docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi
awk '{print $3}'एक महत्वपूर्ण हिस्सा है। यह 3 कॉलम से आईडी निकालता है।
मेरे लिए काम किया ( डॉकर संस्करण 19.03.5 ):
docker rmi $(docker images 'imagename' -q)
कमांड " डॉकटर इमेजेस 'इमेजिनेम' -q " सिंगल क्वैड तर्क के सभी इमेज आईडी को सूचीबद्ध करेगा, इसलिए इसे डॉकटरमी (या फोर्किंग के लिए डॉक राइमी-फोर्स ) के साथ सम्मिलित करें, यह चयनित नाम वाली सभी छवियों को हटा देगा
मामूली टिप्पणी: हम जो अनुभव कर रहे हैं, उससे ऐसा लगता है कि आप - docker 18.03 के बाद से - अब केवल नाम के आधार पर असंबद्ध छवियों को हटाने में सक्षम नहीं हैं। आपको या तो नाम + टैग का उपयोग करने की आवश्यकता है जैसा कि ऊपर कहा गया है या आईडी का उपयोग करें।
docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'
docker rmi $(docker images --filter=reference="IMAGENAME:TAG")
उदाहरण के लिए यदि मेरे पास निम्न चित्र हैं
REPOSITORY TAG IMAGE ID CREATED SIZE
abcdefg/hij 7.0.0-beta-4.0 3128835950cd 7 days ago 51.4MB
abcdefg/hij-action 7.0.0-beta-4.0 42a7255beb74 7 days ago 97.4MB
abcdefg/hij-test 7.0.0-beta-4.0 17246aed35d0 7 days ago 97.4MB
abcdefg/hij-server 7.0.0-beta-4.0 42c45e561f2c 7 days ago 335MB
abcdefg/hij-init 7.0.0-beta-3.0 f648bb622933 7 days ago 55.2MB
abcdefg/hij-dir 7.0.0-beta-3.0 0db07d3aaccf 7 days ago 97.4MB
abcdefg/hij-mount 7.0.0-beta-3.0 18d1c0e1502c 4 weeks ago 33.7MB
फिर docker rmi $(docker images --filter=reference="abcd*:*4.0")पहले चार छवियों को हटा देगा।
अधिक जानकारी के लिए कृपया https://docs.docker.com/engine/reference/commandline/images/ देखें
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
मेरी जरूरतों को पूरा करने के लिए इस प्रश्न का हल एक साथ रखें, जो पहले पोस्ट नहीं किया गया था।
मैं स्थानीय रूप से निर्मित छवियों से मेल खाना चाहता था: library/myappजिन्हें मैंने नाम दिया, टैग किया और एक निजी रेपो में धकेल दिया myrepo.org/library/myapp:। एक बार उन्हें धकेल दिया जाए, तो मैं स्थानीय डॉकटर रेज को साफ करना चाहता हूं।
और मुझे परवाह नहीं है अगर कुछ भी नहीं मिला है या कमांड एक त्रुटि फेंकता है। इस प्रकार || trueलिपियों में शामिल करने के लिए अंत में जोड़ा गया ।
docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true
@ आदित्य के जवाब के आधार पर, आप आसानी से छवियों को हटाने के लिए एक बैश फ़ंक्शन भी बना सकते हैं। इस फंक्शन को अपने पास रखें ~/.profile। एक नया शेल सत्र बनाएं या इसे स्रोत बनाएं source ~/.profile।
function drmi() {
docker images | grep $1 | xargs docker rmi
}
उपयोग:
drmi golang
सूचना:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}" |grep imagename |grep none)
यह त्रुटि दें:
डेमन से त्रुटि प्रतिक्रिया: अमान्य संदर्भ प्रारूप
शायद इसलिए कि मेरी छवियां इस तरह दिखती हैं:
hostname:5000/imagename:<none>
मुझे छवि आईडी का उपयोग करना था और यह कमांड करना था:
docker rmi `docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" |grep imagename |grep none |cut -d ' ' -f2`
बाहर निकलने वाले कंटेनरों को निकालने के लिए:
docker container rm `docker container ls -a --format "{{.ID}} {{.Image}} {{.Status}}" |grep Exited |grep imagename|cut -d ' ' -f1`