डॉकर में कोई छवि कैसे निकालता है?


839

मैं ओएस एक्स 10.8.4 (माउंटेन लायन) के तहत वैगरेंट के तहत डॉकर चला रहा हूं, और जब भी मैं एक सहेजी गई छवि को हटाने की कोशिश करता हूं, मुझे एक त्रुटि मिलती है:

$ docker rmi some-image-id
2013/07/15 hh:mm:ss unexpected JSON input

rmiसहायता के अनुसार , उचित वाक्यविन्यास है docker rmi IMAGE [IMAGE...], और मुझे यकीन नहीं है कि क्या बनाना है।

मैं एक छवि कैसे हटा सकता हूं?

$ docker version
Client version: 0.4.8
Server version: 0.4.8
Go version: go1.1

 

$docker info
Containers: 1
Images: 3

दिलचस्प बात यह है कि जब मैं दौड़ता हूं तो docker psकोई भी कंटेनर दिखाई नहीं देता है। रनिंग docker imagesचार (4) baseइमेज और एक (1) nodeइमेज दिखाता है ।


1
आप किस संस्करण का उपयोग कर रहे हैं? क्या आप 'docker version' और 'docker info' के आउटपुट को पेस्ट कर सकते हैं? मैंने सिर्फ मास्टर के साथ कोशिश की और यह ठीक रहा।
क्रीक

मैंने उस जानकारी के साथ सवाल अपडेट किया है।
जूल्स

1
docker infoछवियों की वास्तविक मात्रा दिखाता है, आप यह कोशिश कर सकते हैं ./docker images -a -q | sort | uniq | wc -lकि यह एक ही परिणाम होना चाहिए (केवल सभी आईडी के लिए -q)। docker psकेवल सक्रिय कंटेनरों को दिखाता है, आप docker ps -aसभी कंटेनरों को सूचीबद्ध करने के लिए कर सकते हैं
जूल

क्या आप -Dविकल्प और क्लाइंट के साथ भी डॉक डेमॉन शुरू करने की कोशिश कर सकते हैं ? docker -d -D& ; docker -D rmi <id>। क्या आप भी कोशिश कर सकते हैं CID=$(docker run -d ubuntu bash); ID=$(docker commit $CID); docker rmi $ID?
23 सितंबर

4
इस अनुरोध पर एक नज़र डालें: github.com/dotcloud/docker/pull/1225
creack

जवाबों:


1012

कोशिश करो docker rmi node। वह काम करना चाहिए।

सभी निर्मित कंटेनरों को देखना उतना ही सरल है जितना कि docker ps -a

सभी मौजूदा कंटेनरों को निकालने के लिए (चित्र नहीं!) चलाएं docker rm $(docker ps -aq)


13
यदि आपके कुछ कंटेनर अभी भी चल रहे हैं, तो आप चला सकते हैं: सभी कंटेनरों को रोकने के लिए docker $ $ (docker ps -qa) को रोकें। मुझे लगता है कि एक चल रहे कंटेनर को हटाने से काम नहीं हो सकता है, कम से कम मुझे याद है कि मुझे इससे समस्या थी। मैं उसका गलत हो सकता हूं ... मैंने मैन पेज चेक किया है और यह मेरी परिकल्पना का समर्थन करता है: "-f, --force = true | रनिंग कंटेनर का झूठा फोर्स हटाना। डिफ़ॉल्ट गलत है।"
कोनराड क्लेने

1
आह, मुझे "सभी मौजूदा कंटेनर को हटाने" के लिए कमांड के बारे में नहीं पता था। खुद लिखा था: docker ps -a | sed -r 's / ^ (\ w +)। * / \ 1 / g' | sed -r 's / ^ CONTAINER //' | sed -r 's / ^ (\ w +) / docker rm \ 1 / g' | awk 'प्रणाली ($ 0)' धन्यवाद!
अनुराग

4
आपको पता है कि कमांड-लाइन विकल्प बुरी तरह से डिज़ाइन किए गए हैं जब आपको बुनियादी कार्यक्षमता प्राप्त करने के लिए शेल-विशिष्ट सुविधाओं का उपयोग करने की आवश्यकता होती है।
user3467349

बाहर निकलने वाली सभी छवियों को हटाने के लिए, आप उपयोग कर सकते हैं - "docker rmi $ (docker images -q)"
मानव

विंडोज़ docker ps -aq | Foreach-Object { docker stop $_; docker rm $_; }
पॉवरशेल

565

निम्नलिखित कुछ तरीके हैं जो डॉकर्स इमेजेस / कंटेनरों को हटाने के लिए हैं:

एकल प्रतिमा निकालें

docker rmi image_name:version/image-id

सभी छवियों को निकालें

docker rmi $(docker images -qf "dangling=true")

कंटेनरों को मारें और उन्हें हटा दें:

docker rm $(docker kill $(docker ps -aq))

नोट: सुंदर शटडाउन के killसाथ बदलेंstop

"मेरी छवि" को छोड़कर सभी छवियां निकालें

को छोड़ कर सभी को दूर करने के ग्रेप का प्रयोग करें my-imageऔरubuntu

docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})

या (बिना जाग)

docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))


25
इसके अलावा: "झूलने" छवियों (टैग के बिना चित्र) को हटा दें:docker rmi $(docker images -qf "dangling=true")
kolypto

5
shoudl bedocker rm $(docker kill $(docker ps -a -q))
बीएमडब्ल्यू

1
"सभी को छोड़कर" docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
जाग के

1
@kolypto "लटकना = सही" लगता है कि अंत में गैर-झूलने वाले कंटेनरों को हटाना नहीं है। बाकी को हटाने के लिए फिर से माइनस -f और झूलने वाला झंडा चलाएँ।
डगडब्लू

1
क्या यह सिर्फ मेरे लिए है, या वह आखिरी सुझाव है (या (बिना जगाए)) वास्तव में काम नहीं कर रहा है?
माइक वाइज

196

सभी डॉकटर कंटेनर हटाएं

docker rm $(docker ps -a -q)

सभी डॉकरों की छवियां हटाएं

docker rmi $(docker images -q)

7
असंबद्ध चित्र हटाएं:docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
बैरेट क्लार्क

1
eq8.eu/blogs/23-spring-cleaning-for-webdevelopers sudo docker rmi -f $(sudo docker images | grep "<none>" | awk "{print \$3}") और फिर 2015 के लाइव रिलीज़ टैग को हटाने के लिए (जैसे live-20150121223) हम कर सकते हैं sudo docker rmi -f $(sudo docker images | grep live-2015 | awk "{print \$3}")
समकक्ष

इसे मजबूर करने के लिए, आपको लिखना होगा: docker -f rm $ (docker ps -a -q)
Adrian Lopez

70

छवि आईडी का उपयोग करके डॉकर से एक छवि को हटाने के लिए:

  1. सभी छवियों की सूची प्राप्त करें

    docker images
    
  2. उदाहरण के लिए, आप जिस छवि को हटाना चाहते हैं, उसकी छवि आईडी की पहचान करें:

    REPOSITORY     TAG     IMAGE ID        CREATED        VIRTUAL SIZE
    kweku360/java  latest  08d3a9b8e166    2 weeks ago         5.733 GB`
    
  3. अंत में छवि आईडी का उपयोग करके छवि को हटा दें (केवल पहले तीन अंक आवश्यक हैं)

    docker rmi 08d
    

1
पहले एक कंटेनर को रोकने और इसे हटाने की जरूरत है, stackoverflow.com/questions/21398087/…
vikramvi

37

छवि:

  1. सूची चित्र

    डॉकटर चित्र

  2. एक छवि निकालें

    docker rmi image_name

  3. फोर्स एक छवि को हटा दें

    docker rmi -f image_name

कंटेनर:

  1. सभी कंटेनरों की सूची बनाएं

    docker ps -a

  2. एक कंटेनर निकालें

    docker आरएम कंटेनर_ड

  3. फोर्स ने एक कंटेनर को हटाया

    docker rm -f container_id


29

अपडेट, जैसा कि पुराने डॉकटर कंटेनरों को हटाने के लिए VonC द्वारा टिप्पणी की गई है ।

डॉकर 1.13 (Q4 2016) के साथ, अब आपके पास:

docker system prune सभी अप्रयुक्त डेटा को हटा देगा (यानी, क्रम में: कंटेनर बंद हो गए, बिना कंटेनरों के वॉल्यूम और बिना कंटेनर वाले चित्र)।

पीआर 26108 देखें और 86de7c0 के लिए प्रतिबद्ध हैं , जो कुछ नए आदेशों की शुरुआत कर रहे हैं ताकि यह पता लगाने में मदद मिल सके कि डॉकर डेमन डेटा डिस्क पर कितना स्थान ले रहा है और आसानी से "अनावश्यक" अतिरिक्त सफाई के लिए अनुमति देता है।

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

पूरी तरह से उत्तर के लिए धन्यवाद, लेकिन यह सीधे मूल प्रश्न का उत्तर नहीं देता है (जो पहले से ही उत्तर दिया गया है, और जिसका शीर्ष उत्तर अभी भी प्रासंगिक है)।
जूल्स

2
मैं सहमत हूँ। हालाँकि, चूंकि इस प्रश्न का शीर्षक बहुत ही सामान्य है, इसलिए यह एक संदर्भ प्रश्न बन गया है, इसलिए मैंने सोचा कि तंत्र पर एक अद्यतन देना है।
क्विकर '

24

कंटेनरों को हटाना

  1. एक विशिष्ट कंटेनर को हटाने के लिए

    docker rm CONTAINER_ID CONTAINER_ID
    
    • सिंगल इमेज के लिए

      docker rm  70c0e19168cf
      
    • कई छवियों के लिए

      docker rm  70c0e19168cf c2ce80b62174
      
  2. बाहर निकाले गए कंटेनर को हटा दें

    docker ps -a -f status=exited
    
  3. सभी कंटेनरों को हटा दें

    docker ps -q -a | xargs docker rm
    


छवियाँ निकालना

docker rmi IMAGE_ID
  1. विशिष्ट चित्र निकालें

    • एकल छवि के लिए

      docker rmi ubuntu
      
    • कई छवियों के लिए

      docker rmi ubuntu alpine
      
  2. झूलने वाली छवियां निकालें
    डेंगलिंग छवियां ऐसी परतें हैं जिनका किसी भी टैग की गई छवियों से कोई संबंध नहीं है क्योंकि डॉकर छवियां कई छवियों का गठन करती हैं।

    docker rmi -f $(docker images -f dangling=true -q)
    
  3. सभी डॉकर छवियां निकालें

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

वॉल्यूम निकालना

वॉल्यूम को सूचीबद्ध करने के लिए, चलाएं docker volume ls

  1. कोई विशिष्ट वॉल्यूम निकालें

    docker volume rm VOLUME_NAME
    
  2. झूलने वाले वॉल्यूम निकालें

    docker volume rm $(docker volume ls -f dangling=true -q)
    
  3. एक कंटेनर और उसके वॉल्यूम निकालें

    docker rm -v CONTAINER_NAME
    

दोहरा क्यों CONTAINER_ID?
पीटर मोर्टेंसन

19

docker rm container_name

docker rmi image_name

docker help

rm एक या अधिक कंटेनर निकालें

rmi एक या एक से अधिक चित्र निकालें


धन्यवाद, लेकिन इस प्रश्न के पहले से ही कई उत्तर हैं, और एक चयनित उत्तर है, जिसने लगभग 3 साल पहले समस्या को हल किया था।
जूल्स

13
docker rmi  91c95931e552

डेमन से त्रुटि प्रतिक्रिया: संघर्ष, 91c95931e552 को हटा नहीं सकता क्योंकि कंटेनर 76068d66b290 इसका उपयोग कर रहा है, FATA को मजबूर करने के लिए -f का उपयोग करें [0000] त्रुटि: एक या अधिक चित्र हटाने में विफल

कंटेनर आईडी ढूंढें,

# docker ps -a

# docker rm  daf644660736 

क्या यह सवाल का जवाब है?
पीटर मोर्टेंसन

क्यों daf644660736? वह पूर्व के किसी से कैसे संबंधित है?
पीटर मोर्टेंसन

5

सबसे पहले, हमें डॉकर कंटेनरों को रोकना और निकालना होगा जो कि डॉकर छवि के साथ जुड़े हुए हैं जिन्हें हम हटाने जा रहे हैं।

तो उसके लिए, पहले

  • docker stop container-id - चल रहे कंटेनर को रोकने के लिए
  • docker rm container-id - कंटेनर को हटाने / निकालने के लिए

फिर,

  • docker rmi image-id - छवि को हटाने / हटाने के लिए

3

संस्करणों के लिए 1.13 और उच्चतर:

docker image rm [OPTIONS] IMAGE [IMAGE...]

तुलना:

[OPTIONS]कोई फर्क नहीं है लगता है।

--force , -f        Force removal of the image
--no-prune          Do not delete untagged parents

प्रेषक: डॉकटर का परिचय 1.13

सीएलआई का पुनर्गठन किया

डॉकर 1.13 में, हम उस तार्किक वस्तु के नीचे बैठने के लिए प्रत्येक कमांड को फिर से एकत्रित करते हैं, जिसके साथ वह इंटरैक्ट कर रहा है। उदाहरण के लिए listऔर startकंटेनरों के अब सबकुंड हैं docker containerऔर historyइसका एक उप-क्षेत्र है docker image

ये परिवर्तन हमें डॉकर सीएलआई सिंटैक्स को साफ करने में मदद करते हैं, मदद पाठ में सुधार करते हैं और उपयोग करने के लिए डॉकर को सरल बनाते हैं। पुरानी कमांड सिंटैक्स अभी भी समर्थित है, लेकिन हम हर किसी को नए सिंटैक्स को अपनाने के लिए प्रोत्साहित करते हैं


3

डोकर निकालने के लिए कुछ कमांड प्रदान करता है images

दिखाएँ / निकालें Images:

docker images
docker images -a # All images
docker images --no-trunc # List the full length image IDs

docker images --filter "dangling=true" // Show unstage images
docker rmi $(docker images -f "dangling=true" -q) # Remove on unstages images

docker rmi <REPOSITORY> or <Image ID> # Remove a single image

docker image prune # Interactively remove dangling images
docker image prune -a # Remove all images

or 

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

इसके अलावा, आप filterएक ही बार में छवियों के सेट को हटाने के लिए मापदंडों का उपयोग कर सकते हैं :

उदाहरण:

$docker images --filter "before=<hello-world>" // It will all images before hello-world

$docker images --filter "since=<hello-world>" // It will all images since hello-world

तो आप इस तरह से उस फिल्टर इमेज को हटा सकते हैं:

docker rmi $(docker images --filter "since=<hello-world>")
docker rmi $(docker images --filter "before=<hello-world>")

1

सभी का उपयोग कर हटाएँ

चरण 1: सभी कंटेनरों को मारें

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker kill $i ; done

चरण 2: उन्हें पहले आरएम

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker rm $i ; done

चरण 3: बल का उपयोग करके छवियों को हटा दें

for i in `sudo docker images | awk '{ print $3}'`; do  sudo docker rmi --force $i ; done

यदि आपको यह कहते हुए त्रुटि हो रही है तो चरण 1 का उपयोग करें क्योंकि यह बाल निर्भरता के कारण नष्ट नहीं किया जा सकता है


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


1

यहां टैग की गई (नाम) छवि को हटाने के लिए एक शेल स्क्रिप्ट है और यह कंटेनर है। Docker-rmi के रूप में सहेजें और 'docker-rmi my-image-name' का उपयोग करके चलाएं

#!/bin/bash

IMAGE=$1

if [ "$IMAGE" == "" ] ; then
  echo "Missing image argument"
  exit 2
fi

docker ps -qa -f "ancestor=$IMAGE" | xargs docker rm
docker rmi $IMAGE

आपको xargs -rइसे बिना मिलान वाले कंटेनर मामले में काम करने की आवश्यकता है।
रूप में।

0

किसी ने जिक्र क्यों नहीं किया docker-compose! मैं सिर्फ एक सप्ताह के लिए इसका इस्तेमाल कर रहा हूं, और मैं इसके बिना जीवित नहीं रह सकता। आपको केवल एक yml लिखने की ज़रूरत है जो अध्ययन के केवल कई मिनट लगते हैं, और फिर आप जाने के लिए तैयार हैं। यह छवियों, कंटेनरों (जो तथाकथित सेवाओं में आवश्यक हैं) को बूट कर सकता है और आपको लॉग्स की समीक्षा उसी तरह करने देता है जैसे आप docker के मूल कमांड के साथ उपयोग करते हैं। इसे आजमाएं:

docker-compose up -d
docker-compose down --rmi 'local'

इससे पहले कि मैं डॉकटर-कंपोज़ का इस्तेमाल करता, मैंने अपनी खुद की शेल स्क्रिप्ट लिखी, फिर मुझे स्क्रिप्ट को कस्टमाइज़ करना पड़ा, जब भी विशेष रूप से ज़रूरत होती है जब एप्लिकेशन आर्किटेक्चर बदल जाता है। अब मुझे यह करने की ज़रूरत नहीं है, डॉकटर-कम्पोज़ के लिए धन्यवाद।


docker-composeएक ऑर्केस्ट्रेशन उपकरण है और अक्सर सरल परियोजनाओं में उपयोग के लिए अव्यावहारिक है। इस प्रश्न के संदर्भ में एक स्टैंडअलोन dockerसमाधान (अक्सर-फ़िनिक्की docker-compose.ymlकॉन्फ़िगरेशन के उपयोग की आवश्यकता नहीं ) बेहतर है। इसके अतिरिक्त, यहाँ पहले से ही कई, कई अच्छे उत्तर हैं।
जूल्स

@ जूल्स ने किसी का भी उल्लेख नहीं किया है कि उनका कहना है कि वे बुरे उत्तर हैं, और इसका मतलब यह नहीं है कि यह एक असहाय जवाब है। डॉकर देशी कमांड खराब नहीं है, लेकिन थकाऊ है और इसे हर बार बहुत अधिक टाइपिंग की आवश्यकता होती है। "एक अच्छा है, और दो बहुत अधिक है"।
तिनि

-1

मेरे लिए निम्नलिखित काम ठीक है:

> docker images
REPOSITORY   TAG           IMAGE ID          CREATED             SIZE
debian       jessie        86baf4e8cde9      3 weeks ago         123MB
ubuntu       yakkety       7d3f705d307c      3 weeks ago         107MB
alpine       3.5           074d602a59d7      7 weeks ago         3.99MB

तो आगे बढ़ो और कुछ इस तरह से चलाकर एक छवि को हटा दें:

> docker rmi debian:jessie
> docker rmi ubuntu:yakkety
> docker rmi alipine:3.5

-1

सूची चित्र:

ahanjura@ubuntu:~$ sudo docker images

REPOSITORY TAG IMAGE ID बनाई गई SIZE 88282f8eda00 19 सेकंड पहले 308.5 MB 13e5d3d682f4 19 घंटे पहले 663 MB बिजीबॉक्स 2 नवीनतम 05fe66bb1144 घंटे पहले 1.129 एमबी ubuntu 16.04 00fd29ccc6f1 5 दिन पहले 1,599 एमबी ५४ घंटे ५४ घंटे, ५१५ एमबी ५१४ ५४ दिन बिजीबॉक्स नवीनतम 6ad733544a63 6 सप्ताह पहले 1.129 एमबी ubuntu 16.10 7d3f705d307c 5 महीने पहले 106.7 एमबी

चित्र हटाएं:

ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00

हटाए गए: SHA256: 88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194 नष्ट किया गया: SHA256: 4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9 नष्ट किया गया: SHA256: 8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8 नष्ट किया गया: SHA256: b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43

ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4

डेमन से त्रुटि प्रतिक्रिया: संघर्ष: 13e5d3d682f4 को हटाने में असमर्थ होना चाहिए (मजबूर होना चाहिए) - छवि का उपयोग बंद कंटेनर द्वारा किया जा रहा है 5593e25eb638

बल द्वारा हटाएं:

ahanjura@ubuntu:~$ sudo docker rmi -f 13e5d3d682f4

हटाए गए: SHA256: 13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e नष्ट किया गया: SHA256: 3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378 नष्ट किया गया: SHA256: 5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af नष्ट किया गया: SHA256: 18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf


-1

मेरे मामले में समस्या यह है कि मेरे पास टो छवियाँ हैं वही नाम है जिसका समाधान नाम या आईडी के बाद टैग जोड़ना है

sudo docker rmi <NAME>:<TAG>

उदाहरण के लिए:

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