কীভাবে পুরানো ডকার পাত্রে সরিয়ে ফেলা যায়


1233

এই প্রশ্নটি সম্পর্কিত, আমি কী অতিরিক্ত, দৌড়, ডকার পাত্রে সম্পর্কে উদ্বিগ্ন হওয়া উচিত?

আমি ভাবছি কীভাবে পুরানো পাত্রে সরিয়ে ফেলা যায়। docker rm 3e552code34aআপনি একটি একক সরান দেয়, কিন্তু আমি ইতিমধ্যে প্রচুর আছে। docker rm --helpকোনও নির্বাচনের বিকল্প দেয় না (সকলের মতো বা চিত্রের নামে)।

সম্ভবত একটি ডিরেক্টরি রয়েছে যেখানে এই পাত্রে সংরক্ষণ করা আছে যেখানে আমি সেগুলি ম্যানুয়ালি সহজে মুছতে পারি?


21
এতিম ডকার খণ্ড পরিষ্কার করার বিষয়েও আপনার বিবেচনা করা উচিত। আমি প্রায়শই দেখতে পাই যে তারা পুরানো পাত্রে এবং পুরাতন চিত্রগুলির চেয়ে অনেক বেশি জায়গা ব্যয় করে। এতিম ডকার ভলিউমগুলি অপসারণ করার জন্য ভাল স্ক্রিপ্টটি এখানে পাওয়া যায়: github.com/chadoe/docker-cleanup-volume এ
নেমানজা ত্রিফুনোভিচ

হতে পারে github.com/chadoe/docker-cleanup-volume আপনাকে সহায়তা করতে পারে।
মিহাই 8

এছাড়াও আপনি ব্যবহার করতে পারেন docker runসঙ্গে --rmপতাকা যা ধারক ক্ষণজীবী করা, চালনার পরে সব ধারক ফাইল মুছে ফেলার।
গর্ডন

12
ডকার 1.13 (Q4 2016) এর সাহায্যে আপনি নতুন আদেশটিও বিবেচনা করতে পারেন docker system prune। দেখুন নিচের আমার উত্তর
ভোনসি

1
ডকার পরিচালন সরঞ্জামটি ব্যবহার করুন Portainer আমরা all the old containers, non using volumes and imagesএই সরঞ্জামটি ব্যবহার করে পরিচালনা করতে পারি এটি ডক্কারদের জন্য এটি একটি সহজ পরিচালনা ইউআই Please refer my update below on how to deploy the application
আনিস ভার্গেস

উত্তর:


1458

যেহেতু ডকার 1.13.x আপনি ডকারের ধারক ছাঁটাইটি ব্যবহার করতে পারেন :

docker container prune

এটি সমস্ত বন্ধ হওয়া পাত্রে সরিয়ে ফেলবে এবং একইভাবে সমস্ত প্ল্যাটফর্মগুলিতে কাজ করা উচিত।

এছাড়াও একটি ডকার সিস্টেমের ছাঁটাই রয়েছে :

docker system prune

যা সমস্ত অব্যবহৃত পাত্রে, নেটওয়ার্কগুলি, চিত্রগুলি (উভয়ই ঝুঁকানো এবং অনর্থিত) পরিষ্কার করবে এবং allyচ্ছিকভাবে, একটি কমান্ডে খণ্ডগুলি।


পুরানো ডকার সংস্করণগুলির জন্য, আপনি যা প্রয়োজন তা পেতে অন্যান্য ইউনিক্স কমান্ডের সাথে ডকার কমান্ডগুলি স্ট্রিং করতে পারেন। সপ্তাহের পুরানো পাত্রে কীভাবে পরিষ্কার করা যায় তার উদাহরণ এখানে:

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

Creditণ দেওয়ার জন্য, যেখানে এটি নির্ধারিত রয়েছে, এই উদাহরণটি https://twitter.com/jpetazzo/status/347431091415703552 থেকে ।


92
সমস্ত অবরুদ্ধ চিত্রগুলি সরাতে অনুরূপ আদেশ: docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
মোহন রাজ

7
@ মিশেলমেলার একটি ডকস্পাইল থেকে একটি চিত্র তৈরি করার সময় আপনি -rmএকটি সফল বিল্ডের পরে মধ্যবর্তী পাত্রে অপসারণের বিকল্পটি নির্দিষ্ট করতে পারেন ।
ফ্রিক কাল্টার

3
@ মিশেলমেলার চিত্রগুলি হ'ল যা ক্যাচিংয়ের জন্য ব্যবহৃত হয়, তাই পাত্রে অপসারণ করলে তা কার্যকর হয় না।
কেন

7
আপনি যদি এর জন্য ডাব ব্যবহার করতে চান তবে এই কমান্ডটি বিবেচনা করুন যদি আপনি সমস্ত থামানো পাত্রে আরএম করতে চান (প্রথম লাইনের কারণে কোনও ত্রুটি ছাড়াই):docker ps -a | awk 'NR > 1 {print $1}' | xargs docker rm
মাসি

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

পাওয়ারশেলের জন্য:

docker rm @(docker ps -aq)

ডকার 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

11
এটি কোনওভাবে আমার পক্ষে কাজ করে না, তবে docker ps -a -q | xargs docker rmকাজ করে, (
সূডোর

86
কি docker rm $(docker ps -a -q)?
qkrijger

8
@ কিক্রিজার, বাশিজম যোগ করা ছাড়া এটি আপনার আসল উত্তর থেকে কিছুই পরিবর্তন করে না। কমান্ড লাইন ওভারফ্লো নিয়ে সমস্যা। xargs বৈকল্পিক একটি সুন্দর উপায়ে এটির সাথে ডিল করে। আইডি সংঘর্ষ এড়ানোর জন্য আমি ডকার পিএস-এ --no-ট্রাঙ্ক যুক্ত করব।
ইহোর কাহারলিচেনকো

8
আপনি যদি কেবলমাত্র ডেটা-পাত্রে ব্যবহার করেন তবে সচেতন হন, এটি সেগুলিও সরিয়ে ফেলবে
ডিজং নগুইন

4
--no-truncযেহেতু docker rmপুরো আইডির দরকার নেই সেহেতু আমি বিন্দুটি দেখতে পাচ্ছি না।
পিথিকোস

411

আপডেট উত্তর ব্যবহার করুন docker system pruneবা docker container pruneএখন। দেখুন VonC এর আপডেট উত্তর

পূর্ববর্তী উত্তর উপরের বিভিন্নগুলি বিভিন্ন ইঙ্গিতগুলি রচনা করা, সমস্ত চলমান পাত্রে অপসারণের সর্বাধিক মার্জিত উপায় বলে মনে হচ্ছে:

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

  • -q কেবল কন্টেইনার আইডিগুলি মুদ্রণ করে (কলাম শিরোনাম ছাড়াই)
  • -f আপনাকে আপনার মুদ্রিত পাত্রে তালিকা ফিল্টার করতে দেয় (এক্ষেত্রে আমরা কেবল বহিরাগত পাত্রে দেখানোর জন্য ফিল্টার করছি)

7
এটি সঠিক উত্তর হওয়া উচিত কারণ $ (ডকারের চিত্রগুলি) এর পাঠ্য আউটপুট ফর্ম্যাটটি পরিবর্তিত হবে না বলে ধরে নেওয়ার পরিবর্তে কোন পাত্রে আর ব্যবহার করা হয় না তা আপনাকে জানাতে ডকারের উপর নির্ভর করে। দুজনের পরিবর্তে মাত্র একটি অতিরিক্ত প্রক্রিয়া তৈরির জন্য বোনাস পয়েন্ট।
ইউরিথমিয়া

18
আপনি জুড়তে চাইতে পারেন -vভলিউম আনত এড়াতে: docker rm -v $(docker ps -q -f status=exited)ড্যাংলিং ভলিউম সম্পর্কে বিশদ জানতে ডকস.ডোকার.com/userguide/dockervolume/… দেখুন ।
rluba

@rluba স্পষ্টতই ডকার ১.৯ এ সমস্যাটি পরিচালনা করার জন্য একটি পৃথক ভলিউম এপিআই থাকবে। github.com/docker/docker/pull/14242
রায়ান ওয়ালস

একটি উপনামটি কার্যকর হতে পারে:alias docker-gc="docker rm -v \$(docker ps -q -f status=exited)"
ফ্রাঙ্ক নেবলুং

উত্তরটি সঠিক হিসাবে চিহ্নিত হিসাবে ভিন্ন, @ রায়ানওয়ালস উত্তরগুলি আরও সংক্ষিপ্ত হওয়ার পাশাপাশি ওএসএক্সে কাজ করে।
রায়

255

সরকারী উপায় হ'ল:

docker rm `docker ps -aq`

ডকার রক্ষণাবেক্ষণকারীরা ইঙ্গিত দিয়েছে যে এর জন্য কোনও আদেশ থাকবে না - এবং আপনি এরকম আদেশগুলি রচনা করেছেন:

আমরা এর আগে এটি নিয়ে আলোচনা করেছি এবং ব্যবহারকারীদের ডকারে অতিরিক্ত কোড যুক্ত না করে উপরের লাইনটি ব্যবহার করতে পছন্দ করি।


6
এটি যদিও এটি একটি খারাপ সমাধান, কারণ এটি স্টোরেজ পাত্রেও মুছবে।
সোব্রিক

8
"স্টোরেজ পাত্রে" বলতে কী বোঝ? আপনি যদি কেবল ডেটা-পাত্রে বোঝাতে চান যা একসময় ডেটা ভলিউমের রেফারেন্স রাখার জন্য ব্যবহৃত হত, docker volumeসাবকম্যান্ডের নামকরণ এবং ভলিউমের নামকরণের কারণে সেগুলি আর প্রয়োজন হয় না ।
L0j1k

মনে রাখবেন যে এটি উইন্ডোজ পাওয়ারশেলের অভ্যন্তরে কাজ করবে না। যে জন্য, এই ভাল সমাধান পাওয়া যাবে: stackoverflow.com/a/23674294/1150683
Bram স্বাগতম Vanroy

@ সোব্রাইক যদি আপনি প্রতিক্রিয়া না দেখেন তবে কমপক্ষে আপনার মন্তব্য মুছে ফেলা উচিত, এটি প্রায় সম্পূর্ণ এবং ক্ষতিকারক বাজে কথা।
পিটারহ - মনিকা পুনরায় ইনস্টল করুন

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 কমিট , শুধুমাত্র Docker 1.13+ জন্য।

docker container prune

ভাগ করে নেওয়ার জন্য ধন্যবাদ - এটি দৃশ্যমান হওয়ার জন্য, আমি আপনাকে উত্তর থ্রেডে উচ্চতর উত্তর
দিচ্ছি

যথারীতি, -fকোনও প্রশ্ন জিজ্ঞাসা না করে ক্লিনআপটিকে বাধ্য করার জন্য পতাকা যুক্ত করুন ।
ডির্ক

3
আজকালকার সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত, উপরের বেশিরভাগগুলি ঠিক সময়ে সময়ে ফিরে এসেছিল তবে নোডেসগুলি অতিরিক্ত জটিল হয়েছে
মেয়ার

রাজি, এত সহজ ইদানীং, আপনি উপরে যান!
ম্যাক্সিমাম গেরিঙ্ক

কোড ব্লকের বিবরণটি এর জন্য docker system prune -a, যা অব্যবহৃত চিত্রগুলি সরিয়ে দেয়। docker system pruneকেবল ঝুঁকির ছবি বা ট্যাগ ছাড়াই চিত্রগুলি সরিয়ে দেয় ।
হাসিম্বোম্ব

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কনটিনিয়ারদের হত্যা করবেন না ।
সোবারিক

3
আপনি status=createdযেগুলি চালিত হয় না এবং কখনও চালিত হয় না সেগুলি পেতে আপনি ব্যবহার করতে পারেন।
এন্ডারল্যান্ড

96

আপডেট হওয়া 2019 (নতুন)

docker container prune

এটি - 2017 (ওলডি) উপায়

সমস্ত স্টপপড কনটেনারগুলি সরানোর জন্য

docker rm $(docker ps -a -q)

সমস্ত কন্টেইনারগুলি অপসারণ করতে (স্টপ্পড এবং নন স্টপড)

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

3
downvoted, যেহেতু এই নিশ্চিত করার জন্য না ভাবে আপনি যে 2017 না - whis হবে docker volume/container/image pruneদেখতে stackoverflow.com/a/39860665/3625317
Eugen মেয়ার

6
ডাউনভোটকে মোকাবেলায় উত্সাহিত করা হয়েছে কারণ ক) এই উত্তরটি ছিল ২০১ from সালের, এবং খ) প্রচুর লোকেরা রক্তপাতের প্রান্তটি চালাবেন না।
আগ্রহী

49

সমস্ত থামানো পাত্রে সরান:

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

Pauk960 এর মন্তব্য থেকে :

সংস্করণ ১.৩.০ থেকে আপনি ফিল্টার ব্যবহারের docker psপরিবর্তে grep Exitedব্যবহার করতে পারেন docker ps -a -f status=exited। এবং আপনি যদি -qএটির সাথে ব্যবহার করেন তবে আপনি কেবলমাত্র পুরো আউটপুটের পরিবর্তে ধারক আইডি পেতে পারেন , এজন্য বিশ্রী ব্যবহার করার দরকার নেই।


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


ব্র্যাডমুর্যাকে ধন্যবাদ! আপনি এগুলিও পছন্দ করতে পারেন: github.com/blueyed/dotfiles/commit/…
নীল রঙের

3
xargs --no-run-if-emptyবিকল্পের কারণে
ওএসএক্সে

13

প্রথমে পাত্রে অপসারণ করার চেষ্টা করার আগে তাদের চালনা বন্ধ করুন

চলমান পাত্রগুলি সরান

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

আপনি killপরিবর্তে ব্যবহার করতে পারে stop। আমার ক্ষেত্রে আমি পছন্দ করি stopযেহেতু আমি তাদের বনাম পুনরায় চালু করার প্রবণতা রাখি every প্রতিবারই একটি নতুন তৈরি করা যাতে আমি তাদের সুন্দরভাবে বন্ধ করার চেষ্টা করি।

দ্রষ্টব্য: একটি ধারক থামানোর চেষ্টা আপনাকে একটি ত্রুটি দেবে:

ত্রুটি: একটি চলমান ধারক অপসারণ করা অসম্ভব, দয়া করে প্রথমে এটি বন্ধ করুন

সমস্ত পাত্রে সরান

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>চিত্র সরিয়ে ফেলবে
  • যদি চিত্রটিতে একাধিক রেপো থাকে: ট্যাগটির উল্লেখ থাকে তবে এটি একটি ধারক চালানো ছাড়া সমস্ত রেপো: ট্যাগ সরিয়ে ফেলবে। আসলে এটি "ডকার আরএমআই" এর প্রকৃতি।
  • অনেক ত্রুটি বার্তা স্ক্রিনে প্রদর্শিত হবে, এবং আপনি সিদ্ধান্ত নিতে পারেন 2>/dev/nullকি না
  • ডকার-জিসি থেকে কিছু শিখুন এবং এর সমস্যাটি ঠিক করুন (এটি এমন চিত্রটি মুছে ফেলতে পারে না যে একচেটিয়া রেপো রয়েছে: ট্যাগ)

9

সুতরাং, ব্যক্তিগতভাবে আমি কেবলমাত্র সাম্প্রতিক এন কনটেইনার এবং চিত্রগুলি রেখে, উভয় চিত্র এবং পাত্রে আপনার ডিপ্লোয় স্ক্রিপ্টের অংশ হিসাবে এটি করার পরামর্শ দিচ্ছি। আমি আমার ডকার চিত্রগুলিকে একই সংস্করণ স্কিমার সাথে ট্যাগ করি 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)

পরিশেষে, আমার সরল উদাহরণে আমরা কেবলমাত্র একবারে একটি সংগ্রহস্থল নিয়ে কাজ করছি, তবে আপনার যদি আরও কিছু থাকে তবে আপনি একই ধারণাটি নিয়ে আরও খানিক পরিশীলিত হয়ে উঠতে পারেন। বলুন যে আমি কেবলমাত্র_আরপো / কিছু_মাজের থেকে শেষ তিনটি চিত্র রাখতে চাই। আমি শুধু মিশ্রিত করা যাবে 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)

এটি জোর করে থামে এবং স্থানীয়ভাবে উপস্থিত সমস্ত পাত্রে সরিয়ে দেয়।


আরও তথ্যের সাথে সম্পাদনা করুন। কেবল-কোড এবং "এটি চেষ্টা করুন" উত্তরগুলি নিরুৎসাহিত করা হয়েছে, কারণ সেগুলিতে কোনও অনুসন্ধানযোগ্য সামগ্রী নেই এবং কারও "কেন এটি চেষ্টা করা উচিত" তা ব্যাখ্যা করবেন না। আমরা এখানে জ্ঞানের উত্স হতে চেষ্টা করি।
ব্রায়ান টম্পসেট - :25 莱恩

উবুন্টু 16.04 এ, ডকারের জন্য সুডো প্রয়োজন, সুতরাং আপনাকে লিখতে হবে sudo docker rm -f $(sudo docker ps -a -q)
ইলিয়ট

প্লাস হিসাবে, এটি উইন্ডোতে পাওয়ারশেলের অধীনেও কাজ করে!
রবার্ট ইভানক

@ এলিয়ট আমার কাছে মনে sudoহয় আপনি যদি কোনও 'ডকার' গ্রুপে যুক্ত না হন তবে সর্বত্র প্রয়োজন। আমি আমার ব্যবহারকারীকে ডকার গ্রুপে যোগ করে সুডো ছাড়াই 16.10 উবুন্টু ব্যবহার করি।
এমোরি ২

7

5 প্রাচীনতম পাত্রে সরান:

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

কতটি পাত্রে বাকী রয়েছে তা দেখুন:

docker ps -aq | wc -l

ভাল কাজ @ পিথিকোস। আমি উত্তরটি যুক্ত করেছি যা সমস্ত পুরানো পাত্রে সরিয়ে দেয়।
মোস্তফা গাদিমি

7

সমস্ত থামানো পাত্রে সরান।

সুডো ডকার আরএম $ (সুডো ডকার PS -a -q)

এটি ডকার PS -a -q সহ সমস্ত ধারকগুলির তালিকা পেয়ে এবং তাদের আইডিগুলি ডকার আরএম-এ প্রেরণ করে সমস্ত বন্ধ হওয়া পাত্রে সরিয়ে ফেলবে। এটি কোনও চলমান পাত্রে সরিয়ে ফেলবে না এবং এটি আপনাকে বলবে যে এটি চলমান চিত্রটি সরাতে পারে না।

সমস্ত অপ্রচলিত চিত্রগুলি সরান

এখন আপনি কিছু জায়গা বাঁচাতে পুরানো চিত্রগুলি পরিষ্কার করতে চান।

সুডো ডকার আরএমআই $ (সুডো ডকার ইমেজ -কি - ফিল্টার "ঝোলা = সত্য")


-V বিকল্পটি উল্লেখ করে ডকার ভলিউমগুলি মুছতে ভুলবেন না (সুডো ডকার আরএম-ভি $ (সুডো ডকার পিএস
কিউ

এটি সন্ধান করা হয়নি, তবে আমি একই অনুমান করি:docker ps -aq | xargs docker rm -v
কুইন

এটি কেবল উইন্ডোজ নয়, লিনাক্সে কাজ করে ... তবে docker rm -f $(docker ps -a -q)উইন্ডোজের জন্য পাওয়ারশেল / ডকারে কাজ করে।
পিটার মর্টেনসেন

6

নতুন উপায়: স্পটফাইফ / ডকার-জিসি কৌশলটি খেলুন।

 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc spotify/docker-gc
  • এক ঘন্টারও বেশি সময় আগে থাকা পাত্রে সরিয়ে ফেলা হয়েছে are
  • এরপরে কোনও অবশিষ্ট পাত্রে অন্তর্ভুক্ত নয় এমন চিত্রগুলি সরানো হবে

এটি পরিবেশগত সেটিংস সমর্থন করে

একাধিক ট্যাগ থাকা চিত্রগুলি মোছার জন্য জোর করে

 FORCE_IMAGE_REMOVAL=1

পাত্রে মুছে ফেলার জন্য জোর করে

 FORCE_CONTAINER_REMOVAL=1 

আবর্জনা সংগ্রহ থেকে সম্প্রতি বের হওয়া পাত্রে এবং চিত্রগুলি বাদ দিয়ে

 GRACE_PERIOD_SECONDS=86400

এই সেটিংটি GRACE_PERIOD_SECONDS এর চেয়ে কম সেকেন্ড আগে তৈরি হওয়া চিত্রগুলি অপসারণও প্রতিরোধ করে।

শুকনো রান

 DRY_RUN=1

অনাথ কনটেইনার ভলিউম পরিষ্কার করা CLEAN_UP_VOLUMES = 1

তথ্যসূত্র: ডকার-জিসি

করার পুরানো উপায়:

পুরানো, চলমান পাত্রে মুছুন

 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
ভনসি

6
  1. সমস্ত ডকার প্রক্রিয়া সরান:

    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 / ডকার / গ্রাফ তথ্য যোগ করার জন্য ধন্যবাদ
জোনাথন DeMarks

প্রশ্নগুলি কীভাবে পাত্রে নয়, চিত্রগুলি কীভাবে সরিয়ে ফেলা হবে তা ছিল।
pauk960

3

আপনি কেবল থামানো পাত্রে সরাতে পারেন। শুরুতে তাদের সমস্ত বন্ধ করুন

docker stop $(docker ps -a -q)

তারপরে আপনি মুছে ফেলতে পারেন

docker rm $(docker ps -a -q)


3

পাত্রে এবং ঝুলন্ত চিত্রগুলি পরিষ্কার করার জন্য এই আদেশটি ব্যবহার করে দেখুন।

docker system prune -f

এটি একটি আশ্চর্যজনক প্রো টিপ!
বি01

3

সমস্ত পাত্রে এবং চিত্রগুলি বন্ধ / সরানোর প্রাথমিক পদক্ষেপ

  1. সমস্ত পাত্রে তালিকাবদ্ধ করুন

    docker ps -aq

  2. সমস্ত চলমান পাত্রগুলি বন্ধ করুন

    docker stop $(docker ps -aq)

  3. সমস্ত পাত্রে সরান

    docker rm $(docker ps -aq)

  4. সমস্ত চিত্র সরান

    docker rmi $(docker images -q)

দ্রষ্টব্য: প্রথমে আপনাকে সমস্ত চলমান পাত্রে অপসারণ করার আগে তাদের থামাতে হবে। এছাড়াও একটি চিত্র অপসারণ করার আগে, আপনাকে থামাতে হবে এবং এর নির্ভরশীল ধারকগুলি অপসারণ করতে হবে।


2

আগ্রহী যে কারও জন্য, আমি ক্রিগ্রজারের কাছ থেকে উদাহরণ নিয়ে এটিকে একটি পরিষ্কার বিষয় হিসাবে পরিণত করেছি (সমস্ত বন্ধ করুন এবং অপসারণ করুন)

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

আপনি যদি কোনওভাবেই পাত্রে সরিয়ে docker rm -f $(docker ps --no-trunc -aq)
ফেলছেন

সত্য, তবে আপনার যদি ভাগাভাগি বা পুনঃব্যবহৃত সংস্থানগুলি (যেমন সংযুক্ত খণ্ডগুলি, সঠিকভাবে বন্ধ হওয়া সক্রিয় সংযোগগুলি ইত্যাদি) পরিষ্কার করার জন্য যথাযথ শাটডাউন করার প্রয়োজন হয় তবে আপনাকে প্রথমে স্টপ কল করতে হবে। দুর্দান্ত উদাহরণ, আপনার যদি জেনকিনস ধারক থাকে তবে ধারকটি হত্যা করা একটি খারাপ ধারণা। আপনি এটি যে কোনও অনির্বাচিত পরিবর্তনগুলি সংরক্ষণ করতে, লগ ইন করা ব্যবহারকারীদের সতর্ক করতে এবং খুব গুরুত্বপূর্ণভাবে সঠিকভাবে সমস্ত বিল্ড বন্ধ করতে চান।
ক্রেইগ ম্যাককোনঘি

সম্মত, এটি একটি খুব কার্যকর বৈধ কেস
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}")

সমস্ত অবরুদ্ধ চিত্র থেকে মুক্তি পেতে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.