पुराने डॉकटर कंटेनरों को कैसे हटाया जाए


1235

यह प्रश्न क्या मुझे अतिरिक्त, गैर-चलने वाले, डॉकटर कंटेनरों के बारे में चिंतित होना चाहिए?

मैं सोच रहा हूं कि पुराने कंटेनरों को कैसे हटाया जाए। docker rm 3e552code34aआप एक ही एक को निकालने की सुविधा देता है, लेकिन मैं पहले से ही बहुत सारे है। docker rm --helpएक चयन विकल्प नहीं देता (जैसे सभी, या छवि नाम से)।

शायद एक निर्देशिका है जिसमें ये कंटेनर संग्रहीत हैं जहां मैं उन्हें आसानी से मैन्युअल रूप से हटा सकता हूं?


21
आपको अनाथ कर्ता संस्करणों की सफाई पर भी विचार करना चाहिए। मुझे अक्सर लगता है कि वे पुराने कंटेनरों और पुरानी छवियों की तुलना में बहुत अधिक स्थान लेते हैं। अनाथ कर्ता खंडों को हटाने की अच्छी पटकथा यहां उपलब्ध है: github.com/chadoe/docker-cleanup-volumes
निमन्जा ट्रिफ़ुनोविक

शायद github.com/chadoe/docker-cleanup-volumes आपकी मदद कर सकते हैं।
Mihai8

आप docker runउस --rmध्वज के साथ भी उपयोग कर सकते हैं , जो कंटेनर के पंचांग को बनाएगा, रन के बाद सभी कंटेनर फ़ाइलों को हटा देगा।
गॉर्डन

12
1.13 (Q4 2016) के साथ, आप नई docker system pruneकमांड पर भी विचार कर सकते हैं । देखें नीचे मेरा उत्तर
VonC

1
डॉक प्रबंधन टूल Portainer का all the old containers, non using volumes and imagesउपयोग करें हम इस टूल का उपयोग करके प्रबंधित कर सकते हैं। डॉकर्स के लिए इसका एक सरल प्रबंधन UI है Please refer my update below on how to deploy the application
अनीश वर्गीज

जवाबों:


1460

Docker 1.13.x के बाद से आप Docker container prune का उपयोग कर सकते हैं :

docker container prune

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

एक डॉकटर प्रणाली भी है :

docker system prune

जो सभी अप्रयुक्त कंटेनरों, नेटवर्क, छवियों (दोनों झूलने और अप्रतिबंधित) को साफ करेगा, और वैकल्पिक रूप से, वॉल्यूम, एक कमांड में।


पुराने डॉकर संस्करणों के लिए, आप अन्य Unix कमांड के साथ Docker कमांड को एक साथ स्ट्रिंग कर सकते हैं जो आपको चाहिए। यहाँ पुराने कंटेनरों को साफ करने का एक उदाहरण दिया गया है, जो सप्ताह पुराने हैं:

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm

क्रेडिट देने के लिए, यह कहाँ है, यह उदाहरण https://twitter.com/jpetazzo/status/34743109141515703552 से है


92
सभी असंबद्ध छवियों को हटाने के लिए इसी तरह की कमान: docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
मोहन राज

7
@ माइकलकर जब डॉकटराइल से एक छवि का निर्माण करते हैं तो आप -rmएक सफल निर्माण के बाद मध्यवर्ती कंटेनरों को हटाने के विकल्प को निर्दिष्ट कर सकते हैं ।
फ्रीक कल्टर

3
@ MichelMüller चित्र कैशिंग के लिए उपयोग किए जाते हैं, इसलिए कंटेनरों को हटाने से इसका प्रभाव नहीं पड़ेगा।
केन कोच्रन

7
यदि आप इसके लिए awk का उपयोग करना चाहते हैं तो इस कमांड पर विचार करें यदि आप चाहते हैं कि rm सभी रुके हुए कंटेनर (पहली पंक्ति के कारण त्रुटि के बिना) करें:docker ps -a | awk 'NR > 1 {print $1}' | xargs docker rm
masi

3
docker rmi $(docker images -q -f dangling=true)
अछूते

626

एक और तरीका है, जो मुझे गिलाउम जे। चार्मेस से मिला है (क्रेडिट जहां यह देय है):

docker rm `docker ps --no-trunc -aq`

एक सुरुचिपूर्ण तरीके से सभी कंटेनरों को हटा देगा।

और विंडोज के लिए बार्टोज़ बिल्की द्वारा:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

PowerShell के लिए:

docker rm @(docker ps -aq)

Docker 1.13 (Q4 2016) के साथ एक अपडेट, VonC को क्रेडिट ( बाद में इस धागे में ):

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

11
यह किसी भी तरह मेरे लिए काम नहीं docker ps -a -q | xargs docker rmकरता है , लेकिन काम करता है, (sudo की जरूरत हो सकती है)
FUD

86
किस बारे में docker rm $(docker ps -a -q)?
किक्रिजर

8
@qkrijger, यह आपके मूल उत्तर से कुछ भी नहीं बदलता है, सिवाय बाशिस्म को जोड़ने के। समस्या कमांड लाइन के अतिप्रवाह के साथ है। xargs वैरिएंट इसे एक अच्छे तरीके से पेश करता है। मैं यह भी जोड़ूंगा - आईडी-क्लैश से बचने के लिए डॉक करने के लिए डॉक पीएस।
इहर काहरलिचेंको

8
जागरूक रहें यदि आप डेटा-ओनली कंटेनर का उपयोग करते हैं, तो यह उन्हें भी हटा देगा
Dzung Nguyen

4
मैं के साथ बात नहीं दिख रहा है --no-truncके बाद से docker rmपूर्ण आईडी वैसे भी जरूरत नहीं है।
पिथिकोस

411

अपडेटेड उत्तर का उपयोग करें docker system pruneया docker container pruneअभी। देखें VonC का अपडेटेड जवाब

पिछला उत्तर ऊपर दिए गए कई अलग-अलग संकेतों की रचना करते हुए, सभी गैर-चलने वाले कंटेनरों को हटाने का सबसे सुंदर तरीका प्रतीत होता है:

docker rm $(docker ps -q -f status=exited)

  • -q सिर्फ कंटेनर आईडी (कॉलम हेडर के बिना) प्रिंट करता है
  • -f आपको मुद्रित कंटेनरों की अपनी सूची को फ़िल्टर करने की अनुमति देता है (इस मामले में हम केवल बाहर निकलने वाले कंटेनरों को दिखाने के लिए फ़िल्टर कर रहे हैं)

7
यह सही उत्तर होना चाहिए क्योंकि यह docker पर निर्भर करता है कि आपको यह बताए कि कौन से कंटेनरों का उपयोग नहीं किया जाता है, बजाय इसके कि $ के टेक्स्ट आउटपुट फॉर्मेट (docker images) को बदलने से बदलाव नहीं आएगा। बोनस अंक दो के बजाय केवल एक अतिरिक्त प्रक्रिया पैदा करने के लिए।
सूर्योदय से

18
आप -vझूलने से बचने के लिए जोड़ना चाह सकते हैं docker rm -v $(docker ps -q -f status=exited):। झूलने वाले संस्करणों के बारे में जानकारी के लिए docs.docker.com/userguide/dockervolumes/… देखें ।
rluba

@ श्रीलबा जाहिरा तौर पर डॉकर 1.9 में उस समस्या से निपटने के लिए एक अलग वॉल्यूम एपी होगा। github.com/docker/docker/pull/14242
रयान वाल्स

एक उपनाम उपयोगी हो सकता है:alias docker-gc="docker rm -v \$(docker ps -q -f status=exited)"
फ्रैंक नेबलंग

सही चिह्नित किए गए उत्तर के विपरीत, @RWWalls उत्तर OSX पर अधिक संक्षिप्त होने के साथ-साथ काम करता है।
रे

255

आधिकारिक तरीका है:

docker rm `docker ps -aq`

डॉकटर अनुरक्षकों ने संकेत दिया है कि इसके लिए कोई आदेश नहीं होगा - और आप इस तरह की आज्ञाओं को बनाते हैं:

हमने पहले इस पर चर्चा की है और उपयोगकर्ताओं को डॉकर के लिए अतिरिक्त कोड जोड़ने के बिना उपरोक्त लाइन का उपयोग करना पसंद करते हैं।


6
हालांकि यह एक बुरा समाधान है, क्योंकि यह भंडारण कंटेनरों को भी हटा देगा।
सोब्रीक

8
आपका क्या मतलब है "भंडारण कंटेनर"? यदि आप डेटा-केवल कंटेनरों का मतलब है, जो एक समय में डेटा वॉल्यूम के संदर्भ रखने के लिए उपयोग किए जाते थे, तो वे अब docker volumeसबकोमैंड, और नामित संस्करणों की उपलब्धता के कारण आवश्यक नहीं हैं ।
L0j1k

ध्यान दें कि यह विंडोज पॉवर्सशेल के अंदर काम नहीं करेगा। उसके लिए, यह एक बेहतर समाधान है: stackoverflow.com/a/23674294/1150683
ब्रैम वेनरो

@ शोब्रिक यदि आप कोई प्रतिक्रिया नहीं करते हैं, तो कम से कम आपको अपनी टिप्पणी को हटा देना चाहिए, यह लगभग पूर्ण और हानिकारक बकवास है।
पेटेर - मोनिका

128

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

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

docker system pruneबिना -ए हटाएगा (छवियों के लिए) केवल झूलने वाली छवियां, या टैग के बिना छवियां, जैसा कि स्माइम्बॉम्ब द्वारा टिप्पणी की गई है ।

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

docker system prune -a

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

Wjv टिप्पणियों के रूप में ,

वहाँ भी है docker {container,image,volume,network} prune, जिसका उपयोग केवल एक प्रकार की वस्तु के अप्रयुक्त उदाहरणों को हटाने के लिए किया जा सकता है ।

में शुरू 913e5cb प्रतिबद्ध , केवल डोकर 1.13+ के लिए।

docker container prune

साझा करने के लिए धन्यवाद - यह दृश्यमान बनने के लिए, मैं आपको उत्तर में सूत्र में उद्धृत कर रहा हूं
qkrijger

हमेशा की तरह, -fबिना किसी सवाल के सफाई के साथ ध्वज को जोड़ने के लिए मजबूर करें।
डिर्क

3
अब उत्तर सही उत्तर के रूप में चिह्नित किया जाना चाहिए, उपरोक्त में से अधिकांश सही समय पर वापस आ गए थे, लेकिन अतिरंजित हैं
यूजेन मेयर

सहमत, इतना आसान हाल ही में, ऊपर तुम जाओ!
मैक्सिम जेरिनक

कोड ब्लॉक में विवरण के लिए है docker system prune -a, जो अप्रयुक्त छवियों को हटा देता है। docker system pruneकेवल टैग के बिना झूलने वाली छवियां, या छवियां निकालता है ।
स्मिम्बोम्ब जूल 20'18

104

अब यह उपयोग करना संभव है को छानने के साथ docker ps:

docker rm $(docker ps -q -f status=exited)

और छवियों के लिए :

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

हालांकि, उनमें से कोई भी कारण होगा docker rmया docker rmiजब कोई मिलान कंटेनर नहीं हैं, तो एक त्रुटि फेंकने के लिए। पुरानेdocker rm $(docker ps -aq) चाल और भी खराब थी क्योंकि यह किसी भी चल रहे कंटेनर को हटाने की कोशिश करती थी, हर एक पर विफल।

यहाँ आपके ~/.bashrcया जोड़ने के लिए एक क्लीनर स्क्रिप्ट है ~/.profile:

# Use `docker-cleanup --dry-run` to see what would be deleted.

function docker-cleanup {
  EXITED=$(docker ps -q -f status=exited)
  DANGLING=$(docker images -q -f "dangling=true")

  if [ "$1" == "--dry-run" ]; then
    echo "==> Would stop containers:"
    echo $EXITED
    echo "==> And images:"
    echo $DANGLING
  else
    if [ -n "$EXITED" ]; then
      docker rm $EXITED
    else
      echo "No containers to remove."
    fi
    if [ -n "$DANGLING" ]; then
      docker rmi $DANGLING
    else
      echo "No images to remove."
    fi
  fi
}

संपादित करें: जैसा कि नीचे उल्लेख किया गया है, मूल उत्तर कंटेनरों को नहीं, छवियों को हटाने के लिए था। प्रलेखन के नए लिंक सहित, दोनों का जवाब देने के लिए अद्यतन किया गया। नए psफ़िल्टरिंग का उल्लेख करने के लिए एड्रियन (और रयान के जवाब) का धन्यवाद ।


2
इस के असली लाभ पर ध्यान दें - आप गलती से storageशंकुधारियों को नहीं मारेंगे।
Sobrique

3
आप उन status=createdलोगों को प्राप्त करने के लिए भी उपयोग कर सकते हैं जो चल नहीं रहे हैं और कभी नहीं चले हैं।
एंडरलैंड

96

अद्यतन 2019 (नवीनतम)

docker container prune

यह - 2017 (OLD) तरीका है

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

docker rm $(docker ps -a -q)

सभी कंटेनरों को हटाने के लिए (बंद और गैर बंद)

docker rm  -f $(docker ps -a -q)

3
डाउनवोट किया गया है, क्योंकि यह सुनिश्चित करने के लिए है कि आप 2017 में ऐसा नहीं करेंगे - जो होगा docker volume/container/image prune, देखें stackoverflow.com/a/39860665/3625317
यूजेन मेयर

6
डाउनवोट का मुकाबला करने के लिए upvote क्योंकि a) यह उत्तर 2016 से था, और b) बहुत से लोग रक्तस्राव को नहीं चलाते हैं।
उत्सुक

49

सभी बंद कंटेनर निकालें:

docker rm $(docker ps -a | grep Exited | awk '{print $1}')

Pauk960 द्वारा टिप्पणी से :

संस्करण 1.3.0 के बाद से आप उपयोग के docker psबजाय फ़िल्टर का उपयोग कर सकते grep Exitedहैं docker ps -a -f status=exited। और अगर आप -qइसके साथ उपयोग करते हैं तो आप केवल पूर्ण आउटपुट के बजाय कंटेनर आईडी प्राप्त कर सकते हैं, इसके लिए awk का उपयोग करने की कोई आवश्यकता नहीं है।


33

आप पसंद नहीं है सभी कंटेनर को हटाने के लिए, इससे पहले कि आप या के साथ एक विशिष्ट कंटेनर के बाद बनाए गए सभी कंटेनर का चयन कर सकते docker ps --before <container-ID>या साथ docker ps --since <container-ID>। यह सुविधा कम से कम डॉक वर्जन 0.6.5 में है।

मान लीजिए कि आपने अपना सिस्टम विकसित कर लिया है, और अब यह काम कर रहा है, लेकिन बहुत सारे कंटेनर बचे हैं। आप उस कार्यशील संस्करण से पहले बनाए गए कंटेनरों को निकालना चाहते हैं। साथ काम कर रहे कंटेनर की आईडी निर्धारित करें docker ps

अन्य कंटेनर से पहले बनाए गए कंटेनर निकालें

docker rm $(docker ps --before 9c49c11c8d21 -q)

एक और उदाहरण। आपके पास अपना डेटाबेस पहले से ही डॉकटर कंटेनर पर चल रहा है। आपने अपने एप्लिकेशन को दूसरे कंटेनर पर चलाने के लिए विकसित किया है और अब आपके पास कई अनावश्यक कंटेनर हैं।

एक निश्चित कंटेनर के बाद बनाए गए कंटेनर निकालें

docker rm $(docker ps --since a6ca4661ec7f -q)

डॉकर /var/lib/docker/containersउबंटू में कंटेनर स्टोर करता है । मुझे लगता है कि अतिरिक्त कंटेनर कोई अन्य नुकसान नहीं करते हैं, लेकिन डिस्क स्थान लेते हैं।


32

अद्यतन: डॉकर संस्करण 1.13 के रूप में (जनवरी 2017 को जारी किया गया), आप बंद किए गए कंटेनरों को साफ करने के लिए निम्न आदेश जारी कर सकते हैं, अप्रयुक्त वॉल्यूम, छवियों को लटकाना और अप्रयुक्त नेटवर्क:

docker system prune

यदि आप यह सुनिश्चित करना चाहते हैं कि आप केवल उन कंटेनरों को हटा रहे हैं जिनकी exitedस्थिति है, तो इसका उपयोग करें:

docker ps -aq -f status=exited | xargs docker rm

इसी तरह, यदि आप डॉकटर सामग्री को साफ कर रहे हैं, तो आप इस तरह से अनअग्जॉट, अनाम चित्रों से छुटकारा पा सकते हैं:

docker images -q --no-trunc -f dangling=true | xargs docker rmi

22

यहां मेरी docker-cleanupस्क्रिप्ट है, जो अनटैग कंटेनर और इमेज को हटाती है। कृपया किसी भी अद्यतन के लिए स्रोत की जाँच करें।

#!/bin/sh
# Cleanup docker files: untagged containers and images.
#
# Use `docker-cleanup -n` for a dry run to see what would be deleted.

untagged_containers() {
  # Print containers using untagged images: $1 is used with awk's print: 0=line, 1=column 1.
  docker ps -a | awk '$2 ~ "[0-9a-f]{12}" {print $'$1'}'
}

untagged_images() {
  # Print untagged images: $1 is used with awk's print: 0=line, 3=column 3.
  # NOTE: intermediate images (via -a) seem to only cause
  # "Error: Conflict, foobarid wasn't deleted" messages.
  # Might be useful sometimes when Docker messed things up?!
  # docker images -a | awk '$1 == "<none>" {print $'$1'}'
  docker images | tail -n +2 | awk '$1 == "<none>" {print $'$1'}'
}

# Dry-run.
if [ "$1" = "-n" ]; then
  echo "=== Containers with uncommitted images: ==="
  untagged_containers 0
  echo

  echo "=== Uncommitted images: ==="
  untagged_images 0

  exit
fi

# Remove containers with untagged images.
echo "Removing containers:" >&2
untagged_containers 1 | xargs --no-run-if-empty docker rm --volumes=true

# Remove untagged images
echo "Removing images:" >&2
untagged_images 3 | xargs --no-run-if-empty docker rmi

स्रोत: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup


@BradMurray धन्यवाद! आप इन्हें भी पसंद कर सकते हैं: github.com/blueyed/dotfiles/commit/…
23y

3
xargs --no-run-if-emptyविकल्प के कारण OSX पर काम नहीं करता है
cttux

13

सबसे पहले, कंटेनर को हटाने का प्रयास करने से पहले उन्हें चलाना बंद करें

रनिंग कंटेनर निकालें

docker rm $(docker stop -t=1 $(docker ps -q))

आप killइसके बजाय उपयोग कर सकते हैं stop। मेरे मामले में मैं पसंद करता हूं stopक्योंकि मैं उन्हें हर बार एक नया बनाना चाहता हूं ताकि मैं उन्हें अच्छी तरह से बंद करने की कोशिश करूं।

नोट: एक कंटेनर को रोकने की कोशिश करने से आपको एक त्रुटि मिलेगी:

त्रुटि: चल रहे कंटेनर को निकालने में असंभव, कृपया इसे पहले बंद करें

सभी कंटेनरों को निकालें

docker rm $(docker ps -a -q)

11

विंडोज शेल से सभी कंटेनरों को हटाना:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

मैं इसे अपने उत्तर में शामिल करूंगा क्योंकि यह पहला पृष्ठ है। धन्यवाद
qkrijger

"विंडोज शेल से ? " क्या आपका मतलब है "विंडोज शेल (सीएमडी) का उपयोग करना" ?
पीटर मोर्टेंसन

10

https://github.com/HardySimpson/docker-cleanup

डॉकटर सफाई

एक छोटे से सभी में एक खोल, जो निकालता है:

  • कंटेनर जो एक दिन पहले से अधिक नहीं चल रहे हैं
  • छवियाँ जो किसी भी शेष कंटेनर से संबंधित नहीं हैं

एक कोंट्राब नौकरी के रूप में चलाने का इरादा है

फ़ीचर

  • यह सभी को दूर करेगा <none>:<none> छवियों
  • यदि छवि में कई रेपो हैं: टैग के संदर्भ में, यह सभी रेपो को हटा देगा: टैग कंटेनर को चलाने के अलावा वास्तव में यह "docker rmi" की प्रकृति है।
  • कई त्रुटि संदेश स्क्रीन पर दिखाए जाएंगे, और आप तय कर सकते हैं 2>/dev/nullया नहीं
  • Docker-gc से कुछ सीखें, और उसकी समस्या को ठीक करें (यह ऐसी छवि को नहीं हटा सकता है जिसमें उत्परिवर्ती रेपो: टैग है)

9

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

REPOSITORY              TAG       IMAGE ID        CREATED         VIRTUAL SIZE
some_repo/some_image    0.0.5     8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    latest    8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    0.0.4     0beabfa514ea    45 hours ago    925.4 MB
some_repo/some_image    0.0.3     54302cd10bf2    6 days ago      978.5 MB
some_repo/some_image    0.0.2     0078b30f3d9a    7 days ago      978.5 MB
some_repo/some_image    0.0.1     sdfgdf0f3d9a    8 days ago      938.5 MB

अब, निश्चित रूप से मैं अपनी सभी छवियों (या कंटेनरों) को अपने सभी प्रोडक्शन बॉक्स पर हमेशा के लिए वापस नहीं रखना चाहता। मैं सिर्फ रोलबैक के लिए अंतिम 3 या 4 चाहता हूं और बाकी सभी चीजों से छुटकारा चाहता हूं। यहां यूनिक्स tailआपकी सबसे अच्छी दोस्त है। चूंकि docker imagesऔर docker psदोनों तारीख से आदेश देते हैं, हम केवल tailसभी का चयन कर सकते हैं लेकिन शीर्ष तीन और उन्हें हटा दें:

docker rmi $(docker images -q | tail -n +4)

अपनी तैनाती लिपियों (या स्थानीय रूप से) के साथ चलाएं कि हमेशा बहुत अधिक कमरे लेने या पुरानी छवियों के साथ सामान अव्यवस्थित करने के बिना बस आराम से रोल करने के लिए पर्याप्त चित्र रखें।

व्यक्तिगत रूप से, मैं किसी भी समय अपने उत्पादन बॉक्स पर केवल एक कंटेनर रखता हूं, लेकिन यदि आप अधिक चाहते हैं तो आप कंटेनरों के साथ उसी तरह का काम कर सकते हैं:

docker rm $(docker ps -aq | tail -n +4)

अंत में, मेरे सरलीकृत उदाहरण में हम केवल एक समय में एक रिपॉजिटरी के साथ काम कर रहे हैं, लेकिन अगर आपके पास अधिक था, तो आप बस एक ही विचार के साथ थोड़ा और अधिक परिष्कृत हो सकते हैं। कहो कि मैं बस पिछले तीन छवियों को कुछ_रेपो / some_image से रखना चाहता हूं। मैं बस में मिश्रण कर सकते हैं grepऔर awkमेरे रास्ते में हो सकता है:

docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)

फिर से, एक ही विचार कंटेनरों पर लागू होता है, लेकिन आप इसे इस बिंदु से प्राप्त करते हैं, इसलिए मैं उदाहरण देना बंद कर दूंगा।


8

उपयोग:

docker rm -f $(docker ps -a -q)

यह स्थानीय रूप से मौजूद सभी कंटेनरों को बलपूर्वक रोकता और हटाता है।


कृपया अधिक जानकारी के साथ संपादित करें। कोड-ओनली एंड "ट्राय दिस" जवाबों को हतोत्साहित किया जाता है, क्योंकि उनमें कोई खोज योग्य सामग्री नहीं होती है, और यह नहीं समझाते कि किसी को "कोशिश" क्यों करनी चाहिए। हम ज्ञान के लिए संसाधन होने के लिए एक प्रयास करते हैं।
ब्रायन टॉम्पसेट -

Ubuntu 16.04 में, docker को sudo की आवश्यकता होती है, इसलिए आपको लिखना होगा sudo docker rm -f $(sudo docker ps -a -q)
इलियट

एक से अधिक के रूप में, यह भी विंडोज के तहत काम करता है!
रॉबर्ट इवानक

sudoजब तक आप अपने उपयोगकर्ता को 'docker' समूह में नहीं जोड़ते, तब तक मुझे लगता है कि हर जगह मेरी आवश्यकता है। मैं अपने उपयोगकर्ता को docker समूह में जोड़कर बिना sudo के ubuntu 16.10 का उपयोग करता हूं।
एमोरी

7

5 सबसे पुराने कंटेनर निकालें:

docker rm `docker ps -aq | tail -n 5`

देखें कि वहां कितने कंटेनर बचे हैं:

docker ps -aq | wc -l

अच्छा काम @Pithikos। मैंने उत्तर जोड़ा है जो सभी पुराने कंटेनरों को हटा देता है।
मुस्तफ़ा ग़दीमी

7

सभी बंद कंटेनरों को निकालें।

सूदो docker rm $ (sudo docker ps -a -q)

यह डॉकटर ps -a -q के साथ सभी कंटेनरों की एक सूची प्राप्त करके और आईडीए आरके करने के लिए अपने आईडी को पास करके सभी रुके हुए कंटेनरों को हटा देगा। यह किसी भी चलने वाले कंटेनर को नहीं निकालना चाहिए, और यह आपको बताएगा कि यह एक चलने वाली छवि को नहीं निकाल सकता है।

सभी असंबद्ध छवियों को हटा दें

अब आप कुछ जगह बचाने के लिए पुरानी छवियों को साफ करना चाहते हैं।

sudo docker rmi $ (sudo docker छवियाँ -q --filter "लटकना = सत्य")


-V

यह नहीं देखा, लेकिन मुझे लगता है कि जैसे ही है:docker ps -aq | xargs docker rm -v
रात

यह केवल लिनक्स पर काम करता है, विंडोज पर नहीं ... लेकिन docker rm -f $(docker ps -a -q)विंडोज के लिए पॉवरशेल / डोकर में काम करता है।
पीटर मोर्टेंसन

6

नया तरीका: Spotify / docker-gc चाल खेलें।

 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc spotify/docker-gc
  • एक घंटे से अधिक समय तक बाहर रहने वाले कंटेनरों को हटा दिया जाता है।
  • ऐसी छवियां जो किसी भी शेष कंटेनर से संबंधित नहीं हैं, उसके बाद हटा दी जाती हैं

इसने पर्यावरणीय सेटिंग्स का समर्थन किया है

कई टैग वाले चित्रों को हटाने के लिए मजबूर करना

 FORCE_IMAGE_REMOVAL=1

कंटेनरों को हटाने के लिए मजबूर करना

 FORCE_CONTAINER_REMOVAL=1 

कचरा संग्रहण से हाल ही में निकाले गए कंटेनरों और छवियों को छोड़कर

 GRACE_PERIOD_SECONDS=86400

यह सेटिंग GRACE_PERIOD_SECONDS सेकंड से पहले बनाई गई छवियों को हटाने से भी रोकती है।

पूर्वाभ्यास

 DRY_RUN=1

अनाथ कंटेनर संस्करणों की सफाई CLEAN_UP_VOLUMES = 1

संदर्भ: docker-gc

पुराना तरीका:

पुराने, न चलने वाले कंटेनरों को हटा दें

 docker ps -a -q -f status=exited | xargs --no-run-if-empty docker rm
             OR 
 docker rm $(docker ps -a -q)

गैर-चलने वाले डॉकटर कंटेनरों से जुड़ी सभी छवियों को हटा दें

 docker images -q | xargs --no-run-if-empty docker rmi

1.10.x और उसके बाद के संस्करण संस्करण के लिए क्लीनअप अनाथ डॉकटर संस्करणों

 docker volume ls -qf dangling=true | xargs -r docker volume rm

समय अवधि के आधार पर

 docker ps -a | grep "weeks ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "days ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "hours ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm

1
दिलचस्प विकल्प। +1
VonC

6
  1. सभी docker प्रोसेस निकालें:

    docker rm $(docker ps -a -q)
    
  2. विशिष्ट कंटेनर निकालें:

    $ docker ps -a (lists all old containers)
    
    $ docker rm container-Id
    

5

बाहर निकलने वाले कंटेनरों को निकालने के लिए आप निम्न कमांड का उपयोग कर सकते हैं:

docker rm $(sudo docker ps -a | grep Exit | cut -d ' ' -f 1)

यहाँ डॉक पर पुरानी छवियों को हटाने के लिए पूर्ण जिस्ट है : पुराने डॉकटर कंटेनरों और छवियों को हटाने के लिए जिस्ट करें


4
#!/bin/bash
# docker-gc --- Remove stopped docker containers

RUNNING=$(docker ps -q)
ALL=$(docker ps -a -q)

for container in $ALL ; do
    [[ "$RUNNING" =~ "$container" ]] && continue
    echo Removing container: $(docker rm $container)
done

उन लोगों के लिए जो इसे स्वयं नहीं खोजना चाहते हैं github.com/spotify/docker-gc
grim

यह एकदम सही है। मैंने एक उत्तर भी लिखा है जिसमें समान कार्यक्षमता है।
मुस्तफ़ा ग़दीमी

3

मैं हमेशा docker rmi $(docker ps -a -q)सभी छवियों को हटाने के लिए उपयोग करता हूं ।

विफल /var/lib/docker/graphहोने पर आप निर्देशिका निकाल सकते हैं docker rmi


/ Var / lib /
docker

सवाल यह था कि कंटेनरों को कैसे हटाया जाए, छवियों को नहीं।
पा ०

3

आप केवल रुके हुए कंटेनरों को निकाल सकते हैं। शुरुआत में सभी को रोकें

docker stop $(docker ps -a -q)

तब आप निकाल सकते हैं

docker rm $(docker ps -a -q)


3

कंटेनर और लटकती छवियों को साफ करने के लिए इस कमांड को आज़माएं।

docker system prune -f

यह एक अद्भुत समर्थक टिप है!
b01

3

सभी कंटेनरों और छवियों को रोकने / हटाने के लिए मूल कदम

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

    docker ps -aq

  2. सभी चल रहे कंटेनरों को रोकें

    docker stop $(docker ps -aq)

  3. सभी कंटेनरों को निकालें

    docker rm $(docker ps -aq)

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

    docker rmi $(docker images -q)

नोट: सबसे पहले आपको सभी चल रहे कंटेनरों को निकालने से पहले रोकना होगा। एक छवि को हटाने से पहले, आपको इसके आश्रित कंटेनर को रोकना और निकालना होगा।


2

रुचि रखने वाले किसी व्यक्ति के लिए, मैंने qkrijger से उदाहरण लिया और इसे एक स्पष्ट सब में बदल दिया (सभी को रोकें और हटाएं)

docker stop `docker ps --no-trunc -aq` ; docker rm `docker ps --no-trunc -aq`

यदि आप वैसे भी कंटेनरों को हटा रहे हैं, तो docker rm -f $(docker ps --no-trunc -aq)तेज़ है
qkrijger

सच है, लेकिन अगर आपको साझा या पुन: उपयोग किए गए संसाधनों (जैसे संलग्न वॉल्यूम, सही ढंग से बंद सक्रिय कनेक्शन, आदि) के लिए उचित शटडाउन के माध्यम से जाने की आवश्यकता है, तो आपको पहले स्टॉप को कॉल करने की आवश्यकता है। महान उदाहरण, यदि आपके पास जेनकिंस कंटेनर है, तो कंटेनर को मारना एक बुरा विचार है। आप चाहते हैं कि यह किसी भी अनपेक्षित परिवर्तनों को सहेजे, उपयोगकर्ताओं में लॉग इन को चेतावनी दे, और, बहुत महत्वपूर्ण बात, सभी बिल्ड को ठीक से रोकें।
क्रैग मैककोनाघी 12

सहमत, यह एक बहुत ही वैध उपयोग मामला है
qkrijger

2
#!/bin/bash

echo Cleanup unused containers
unused_containers=$(docker ps -a -q --filter="status=exited")
if [[ -n $unused_containers ]]
then
  docker rm $unused_containers
fi

echo Cleanup unused images
unused_images=$(docker images | grep '^<none>' | awk '{print $3}')
if [[ -n $unused_images ]]
then
  docker rmi $unused_images
fi

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


2

मैं उपयोग कर रहा हूँ:

docker rm -v $(docker ps -a -q -f status=exited)

बाहर निकलने वाले कंटेनरों को हटाने के लिए और:

docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")

सभी अछूता छवियों से छुटकारा पाने के लिए।

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