আমি কীভাবে ডকারের চিত্রগুলি মুছতে পারি?


265

আমি নিম্নলিখিত চিত্রগুলি করেছি:

alex@alexvps:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              70c0e19168cf        5 days ago          1.069 GB
<none>              <none>              c2ce80b62174        8 days ago          399.2 MB
<none>              <none>              60afe4036d97        8 days ago          325.1 MB

এবং যখন আমি তাদের মধ্যে একটি মুছে ফেলার চেষ্টা করি তখন:

alex@alexvps:~$ sudo docker rmi 60afe4036d97
Error: Conflict, 60afe4036d97 wasn't deleted
2014/01/28 00:54:00 Error: failed to remove one or more images

আমি কীভাবে এগুলি সরাতে পারি? কেন এমন দ্বন্দ্ব?

উত্তর:


478

সমস্ত চিত্র মুছতে, প্রদত্ত কমান্ডটি ব্যবহার করুন

docker rmi $(docker images -q)

সমস্ত পাত্রে মুছতে, প্রদত্ত কমান্ডটি ব্যবহার করুন

docker rm $(docker ps -a -q)

সতর্কতা: এটি আপনার সমস্ত চিত্র এবং পাত্রে ধ্বংস করবে। এগুলি পুনরুদ্ধার করা সম্ভব হবে না!

এই সমাধানটি টেকওভারফ্লো.নেট দ্বারা সরবরাহ করা হয়েছে


17
সহজ এবং সরল। এছাড়াও আপনি নীচে নীচে চিত্র অপসারণ জোর করতে। 'ডকার আরএমআই-ফ $ (ডকার ইমেজ
কিউ

37
উইন্ডোজ পাওয়ারশেলের সমতুল্যdocker images -q | %{docker rmi -f $_}
বীটিং টুএডিফিল্যান্সর রোবট

1
প্রথম আমি @muheed উপর cmd কমান্ড ব্যবহার করা কীভাবে উত্তর দিতে ( stackoverflow.com/a/30475249/2747020 কিছু ইমেজ সরানোর আনলক করতে):sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}
Razec Luar

1
ডকার পাত্রে উইন্ডোজ পাওয়ারশেলdocker ps -a -q | %{docker rm -f $_}
ডেক্সটার

1
নীচে @ অ্যালেক্সাইজ notes78 নোট হিসাবে, আপনি এখন ব্যবহার করতে পারেন docker system prune। সুতরাং everyhing মুছা: docker kill $(docker ps -q)একটি দ্বারা অনুসরণ স্টপ পাত্রে docker system prune -aসবকিছু মুছে ফেলা হবে - দেখুন stackoverflow.com/a/44309011/247708
ভরত

101

সম্ভাব্য কারণ: কারণ হতে পারে যে এই চিত্রটি বর্তমানে চলমান ধারক দ্বারা ব্যবহৃত হয়। এই ক্ষেত্রে, আপনি চলমান পাত্রে তালিকাবদ্ধ করতে পারেন, প্রাসঙ্গিক ধারকটি থামাতে এবং তারপরে চিত্রটি সরাতে পারেন:

docker ps
docker stop <containerid>
docker rm <containerid>
docker rmi <imageid>

আপনি যদি ডকার পিএস দ্বারা ধারক খুঁজে না পান তবে আপনি ইতিমধ্যে সমস্ত উপস্থিত পাত্রে তালিকাবদ্ধ করতে এবং সেগুলি সরাতে এটি ব্যবহার করতে পারেন।

docker ps -a | grep 60afe4036d97
docker rm <containerid>

দ্রষ্টব্য: আপনি পাত্রে ব্যবহারের ক্ষেত্রে একবারে সমস্ত নিঃসৃত পাত্রে মুছে ফেলার বিষয়ে সতর্ক হন Volume-Only। এগুলি Exitরাজ্যে থাকে তবে এতে দরকারী ডেটা থাকে


আসলে, আপনি নির্দিষ্ট করে একটি বার্তা পাবেন। সম্ভবত এটির উপর ভিত্তি করে অন্য ছবি? প্রথমে আপনি এই চিত্রটি থেকে তৈরি করেছেন এমন কোনও চিত্র সরিয়ে দেওয়ার চেষ্টা করুন।
qkrijger

12
আমি চিত্রটি মুছে ফেলতে সক্ষম হয়েছি sudo docker ps -a | grep Exit | awk '{print $1}' | sudo xargs docker rm( github.com/dotcloud/docker/issues/3258 এর জন্য ধন্যবাদ ) এবং তারপরেsudo docker rmi 70c0e19168cf
alexyz78

2
Exitরাজ্যে চিত্রগুলি মুছতে সাবধান হন । আপনি যদি ডেটা ভলিউম-কেবল পাত্রে ব্যবহার করেন তবে সেগুলি চলমান থাকে না।
aceofspades

1
awk গ্রেপ করতে পারে:awk '/Exit/ {print $1}'
ডুইট স্পেন্সার

আপনার আদেশগুলি এটি ফেলে দেয় Error response from daemon: No such container: ...। কোনটি প্রতিস্থাপন করতে হবে এবং আমার কী প্রতিস্থাপন করা উচিত তা বলা শক্ত hard ব্যবহার করবেন না...
Felo Vilches

60

ত্রুটির কারণটি হ'ল যদিও চিত্রটির কোনও ট্যাগ নেই, তবুও সেই চিত্রটিতে একটি ধারক তৈরি রয়েছে যা exitedরাজ্যে থাকতে পারে । সুতরাং আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনি এই চিত্রগুলিতে তৈরি সমস্ত ধারক বন্ধ এবং মুছে ফেলেছেন। নিম্নলিখিত কমান্ডটি আপনাকে চালিত না এমন সমস্ত ধারক অপসারণ করতে সহায়তা করে:

docker rm `docker ps -aq --no-trunc --filter "status=exited"`

এখন এটি সমস্ত ঝোলা-মধ্যবর্তী <none>চিত্রগুলি সরিয়ে দেয় :

docker rmi `docker images --filter 'dangling=true' -q --no-trunc`

দ্রষ্টব্য: সমস্ত চলমান পাত্রে থামাতে:

docker stop `docker ps -q`

1
এর জন্য আপনাকে ধন্যবাদ, আমি এটিকে সবচেয়ে পরিষ্কার বাস্তবায়ন হিসাবে পেয়েছি।
জোসেফ সাওয়ের

7
আপনার যদি ডেটা ভলিউম পাত্রে থাকে যেহেতু তাদের "স্ট্যাটাস = প্রস্থান" হয়েছে সে বিষয়ে সতর্ক হন। এর অর্থ হ'ল আপনি আপনার সমস্ত ডেটা হারাবেন।
জোহান

19

চিত্রটি বর্তমানে চলমান ধারক দ্বারা ব্যবহার করা যেতে পারে, তাই আপনাকে প্রথমে কন্টেইনারটি থামাতে এবং সরিয়ে ফেলতে হবে।

docker stop <container-name>
docker rm <container-id>

তারপরে আপনি চিত্রটি মুছতে চেষ্টা করতে পারেন:

docker rmi <image-id>

আপনাকে অবশ্যই নিশ্চিত হতে হবে যে এই চিত্রটি অন্যান্য চিত্রের উপর নির্ভর করে না (অন্যথায় আপনাকে অবশ্যই এগুলি মুছতে হবে)।

আমার একটি অদ্ভুত কেস হয়েছিল যার মধ্যে আমার আর কোনও ধারক এখনও বেঁচে নেই ( docker ps -aকিছুই ফেরেনি) তবে আমি ছবিটি এবং এর চিত্র-নির্ভরতা মুছতে পারি না।

এই বিশেষ ক্ষেত্রে সমাধানের জন্য আপনি এটি দিয়ে চিত্রটি সরিয়ে দিতে বাধ্য করতে পারেন:

docker rmi -f <image-id>

19

বাশে:

for i in `sudo docker images|grep \<none\>|awk '{print $3}'`;do sudo docker rmi $i;done

এটি "<কোন>" নামের সমস্ত চিত্র সরিয়ে ফেলবে। আমি এই চিত্রগুলি অপ্রয়োজনীয় খুঁজে পেয়েছি।


3
এটি প্রশ্নের উত্তর দেয় না, তবে এটি এখনও খুব দরকারী। ধন্যবাদ।
বিনউইডিয়ার

5
এই কমান্ডটি সহজ করুন docker images|grep \<none\>|awk '{print $3}' | xargs docker rmi, এটির জন্য sudoঅনুমতির প্রয়োজন হতে পারে
ল্যারি

15

আমি এই আদেশে উত্তরটি পেয়েছি:

docker images --no-trunc | grep none | awk '{print $3}' | xargs docker rmi

আমি যখন আপনার ব্যবহৃত কিছু চিত্র মুছলাম তখন আমার সমস্যা ছিল এবং আমি বুঝতে পারি নি (ব্যবহার করে docker ps -a)।


9

যেহেতু ডকার ভার। 1.13.0 (জানুয়ারী 2017) system pruneকমান্ড আছে:

$ docker system prune --help

Usage:  docker system prune [OPTIONS]

Remove unused data

Options:
-a, --all     Remove all unused images not just dangling ones
-f, --force   Do not prompt for confirmation
    --help    Print usage

7

সানির উত্তর ছাড়াও:

পাওয়ার শেল উইন্ডোতে উইন্ডোজ মেশিনে সমস্ত উইন্ডোজ (উইন্ডোজের জন্য ডকার সহ) মুছে ফেলার জন্য, করুন:

docker images -q | %{docker rmi -f $_}

পাওয়ার শেল উইন্ডোতে উইন্ডোজ মেশিনে সমস্ত উইন্ডো (উইন্ডোজের জন্য ডকার সহ) মুছে ফেলার জন্য, এটি করুন:

docker ps -a -q | %{docker rm -f $_}

6

প্রথমে নিম্নলিখিত কমান্ডটি ব্যবহার করে সমস্ত পাত্রে সরিয়ে ফেলুন

sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}

তারপরে, নীচের কমান্ডটি ব্যবহার করে চিত্রটি তার আইডি দ্বারা সরান

sudo docker rmi <image-id>

এটি কারও কাছে মনে রাখা উচিত যে এটি চলমান ডকার পাত্রে সমস্ত চালককে সরিয়ে দেবে এমন কারও কাছে এটি স্পষ্ট নয়।
মাইকেল মায়ার


4

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

docker ps -q -a | xargs docker rm

সমস্ত ডকার চিত্র সরিয়ে জোর করে

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

4

--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 এর মধ্যে প্রথম কলামটি রয়েছে, অর্থাৎ ডকারের ধারক আইডি।

এবং docker images$ 3 হল তৃতীয় কলাম, অর্থাৎ ডকার চিত্র আইডি image


3

সমস্ত অপ্রচলিত চিত্রগুলি সরাতে একটি আদেশের সর্বাধিক সংক্ষিপ্ত সংস্করণ হ'ল:

docker rmi $(docker images | grep "^<none>" | awk '{print $"3"}')

3

কিছু ডকার চিত্র মুছতে আপনাকে নীচের আদেশটি কার্যকর করতে হবে:

$ docker rmi <docker_image_id>

সুতরাং, সমস্ত ডকার চিত্র মুছে ফেলার জন্য আপনি নিম্নলিখিত কমান্ডটি কার্যকর করতে পারেন:

$ docker rmi $(docker images -q)

এখন, আপনি যদি সমস্ত ডকার চিত্র মুছতে চান (ব্যবহারযোগ্য চিত্রগুলি সহ), আপনি পতাকাটি যুক্ত করতে পারেন -f, উদাহরণস্বরূপ:

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

3

ব্যবহার

docker image prune -all

অথবা

docker image prune -a

সমস্ত ঝুঁকিপূর্ণ চিত্রগুলি সরান। যদি -aনির্দিষ্ট করা থাকে তবে এটি কোনও ধারক দ্বারা রেফারেন্সযুক্ত সমস্ত চিত্র সরিয়ে ফেলবে।

দ্রষ্টব্য: ছাঁটাই থেকে কিছু অপসারণ করার আগে আপনাকে নিশ্চিতকরণের জন্য অনুরোধ করা হয়েছে, তবে কী কী সম্ভাব্যভাবে সরানো হবে তার একটি তালিকা আপনাকে দেখানো হবে না। এছাড়াও,docker image ls নেতিবাচক ফিল্টারিং সমর্থন করে না, তাই এটি কঠিন ভবিষ্যদ্বাণী করা কি চিত্র আসলে সরানো হবে।

যেমন ছাঁটাইয়ের জন্য ডকারের ডকুমেন্টেশনের অধীনে বলা হয়েছে ।


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


0

আমি পাওয়ারশেল স্ক্রিপ্টের সাথে একটি সমাধান পেয়েছি যা এটি আমার জন্য করবে।

স্ক্রিপ্ট প্রথমে সমস্ত পাত্রে সমস্ত পাত্রে অপসারণ করার পরে থামায় এবং তারপরে ব্যবহারকারী দ্বারা নামযুক্ত চিত্রগুলি সরিয়ে দেয়।

এখানে দেখুন http://www.devcode4.com/article/powershell-remove-docker-containers- এবং- চিত্রসমূহ

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