नाम के आधार पर डॉकटर छवियों को कैसे हटाया जाए?


94

मैं डॉक छवियों के सभी संस्करणों को उन नामों से हटाना चाहता हूं जिनमें दिए गए स्ट्रिंग ( imagename) हैं।
मैंने नीचे कोशिश की है, लेकिन यह काम नहीं करता है:

docker images | grep 'imagename' | xargs -I {} docker rmi

जवाबों:


136

निम्नलिखित प्रयास करें:

docker rmi $(docker images |grep 'imagename')

विंडोज पॉवर्सशेल:

docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")

17
डॉकर का वर्तमान संस्करण इसका समर्थन करता है (grep नहीं): docker rmi $ (docker छवियाँ 'कल्पना')
चार्ली

डॉकर का वर्तमान संस्करण इस बात का समर्थन करता है - शायद मुझे कुछ याद आ रहा है? - डॉक रमी 'कल्पना'
चार्ली

10
@ चेर्ली मुझे लगता है कि ज्यादातर लोग एक ऐसी छवि की तलाश कर रहे हैं, जो ' इमेजेनम ' नाम की एक ही छवि के बजाय ' इमेजेनम ' से मेल खाती हो ।
RJFalconer

1
मुझे यह निम्न त्रुटि हो रही है: "docker rmi को कम से कम 1 तर्क की आवश्यकता है।"
मिकाली

@michali का अर्थ है कि कोई मिलान वाली छवि वापस नहीं आई है। क्या आप यह सत्यापित कर सकते हैं कि बस चलने से कोई मिलान प्रविष्टि मौजूद है:docker images |grep 'imagename'
Rambler

73

थोड़ा और अधिक सटीक संस्करण - केवल रिपॉजिटरी नाम पर ग्रीपिंग:

docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')

25
यह केवल नवीनतम के रूप में टैग की गई छवियों को हटाता हैdocker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
ड्रू

धन्यवाद! यही मैं ढूंढ रहा था।
हार्दिक

26
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')

1
क्या आप बता सकते हैं कि यह क्या करता है? यादृच्छिक कोड के बिट खतरनाक हो सकते हैं।
किलोजॉल्स

6
docker images --format '{{.Repository}}:{{.Tag}}आउटपुट को फ़िल्टर करता है इसलिए केवल रेपो और टैग दिखाए जाते हैं (यानी foo:latest)। grep 'imagenameउन पंक्तियों को केवल उन्हीं चित्रों को फ़िल्टर करता है जिनमें सम्‍मिलित हैं imagename। यह कहते हुए कि $()मूल्यांकन करता है कि बाहरी में गुजरता है और docker rmiउन छवियों को निकालता है जो मिलान किए गए थे।
एडम पार्किन

इसके बाद के संस्करण पर विस्तार, जब आप एकदम सही छवि नाम करने के लिए इसी सभी टैग की गईं छवियों के रूप में निम्नानुसार हटा सकते हैं:docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
Timmins

1
विंडोज़ पर "grep" मौजूद नहीं है (cmd या पावरशेल) विधवाओं पर निम्न का उपयोग किया जा सकता हैdocker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
ज़मीर फ़ूज़न

20

docker imagesवास्तव में फ़िल्टर करने के लिए छवि नाम के रूप में पहले स्थितीय तर्क का उपयोग करता है। कोई grep और awk की आवश्यकता नहीं है। -qविकल्प केवल मिलान छवियों आईडी जो को खिलाया जा सकता वापस आ जाएगी docker rmi

docker rmi --force $(docker images -q 'imagename' | uniq)

uniqमामले में आप एक ही छवि अलग ढंग से टैग किए गए डुप्लिकेट निकालने के लिए आवश्यक है,।


यह निश्चित रूप से आज सबसे अच्छा विकल्प है। प्रश्न की निरंतरता के साथ रखने के लिए हालांकि कल्पना नाम उद्धरण में होना चाहिए।
कोलम भंडाल

8

बस आप --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 स्तंभ यानी डोकर छवि आईडी है


5

मुझे अपना उत्तर अधिक सरल लगता है।

उदाहरण के लिए, आपकी छवि का नाम है python_image

फिर आपका कोड होना चाहिए :

docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")

आशा है कि ये आपकी मदद करेगा।


क्या हम वाइल्डकार्ड नाम के आधार पर कई छवियों के लिए ऐसा कर सकते हैं?
चर

3

मुझे एक और संक्षिप्त जवाब भी मिला। एकमात्र बदलाव अनावश्यक -I {}ध्वज को हटाना था ।

docker images | grep 'imagename' | xargs docker rmi


3
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}'

3

किसी कारण से मैं यहाँ दिए गए किसी भी उत्तर का उपयोग करने में सक्षम नहीं था। यहाँ मेरे लिए क्या काम किया है।

docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi

awk '{print $3}'एक महत्वपूर्ण हिस्सा है। यह 3 कॉलम से आईडी निकालता है।


3

मेरे लिए काम किया ( डॉकर संस्करण 19.03.5 ):

docker rmi $(docker images 'imagename' -q)

कमांड " डॉकटर इमेजेस 'इमेजिनेम' -q " सिंगल क्वैड तर्क के सभी इमेज आईडी को सूचीबद्ध करेगा, इसलिए इसे डॉकटरमी (या फोर्किंग के लिए डॉक राइमी-फोर्स ) के साथ सम्‍मिलित करें, यह चयनित नाम वाली सभी छवियों को हटा देगा



0

मामूली टिप्पणी: हम जो अनुभव कर रहे हैं, उससे ऐसा लगता है कि आप - docker 18.03 के बाद से - अब केवल नाम के आधार पर असंबद्ध छवियों को हटाने में सक्षम नहीं हैं। आपको या तो नाम + टैग का उपयोग करने की आवश्यकता है जैसा कि ऊपर कहा गया है या आईडी का उपयोग करें।

docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'

0

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")
डॉक

0

मेरी जरूरतों को पूरा करने के लिए इस प्रश्न का हल एक साथ रखें, जो पहले पोस्ट नहीं किया गया था।

मैं स्थानीय रूप से निर्मित छवियों से मेल खाना चाहता था: library/myappजिन्हें मैंने नाम दिया, टैग किया और एक निजी रेपो में धकेल दिया myrepo.org/library/myapp:। एक बार उन्हें धकेल दिया जाए, तो मैं स्थानीय डॉकटर रेज को साफ करना चाहता हूं।

और मुझे परवाह नहीं है अगर कुछ भी नहीं मिला है या कमांड एक त्रुटि फेंकता है। इस प्रकार || trueलिपियों में शामिल करने के लिए अंत में जोड़ा गया ।

docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true

0

@ आदित्य के जवाब के आधार पर, आप आसानी से छवियों को हटाने के लिए एक बैश फ़ंक्शन भी बना सकते हैं। इस फंक्शन को अपने पास रखें ~/.profile। एक नया शेल सत्र बनाएं या इसे स्रोत बनाएं source ~/.profile

function drmi() {
    docker images | grep $1 |  xargs docker rmi
}

उपयोग:

drmi golang

0

सूचना:

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