حذف ایمیج ها با تگ none در داکر
در هنگام build ایمیج در داکر، کانتینرهای میانی (intermediate container) ایجاد میشوند. ممکن است ایمیج بعضی ازین کانتینرها با نام none و تگ none در سیستم ذخیره شوند:
وجود این ایمیج ها هیچ مشکلی ایجاد نمیکند. فقط برای ترو تمیز تر بودن محیط کاری داکری خود و نیز مشاهده راحت تر ایمیج های اصلی می توانید این کانتینر ها را حذف نمایید. حذف این ایمیج ها نیز هیچ مشکلی ایجاد نمیکند. ایمیج ها با تگ none معمولا درنتیجه build های ناموفق ایجاد می شوند. به ایمیج های با تگ none در اصطلاح dangling image گفته می شود. یعنی مربوط به هیچ لایه ای از ایمیجهای صحیح و فعال نیستند.
برای مشاهده dangling image ها از دستور زیر استفاده کنید:
$ docker images -f "dangling=true"
برای حذف dangling image از دستور زیر استفاده نمایید:
$ docker rmi $(docker images -f "dangling=true" -q)
آپشن -q برای فیلتر نمودن بر اساس آیدی ایمیج ها استفاده می شود.
درصورتیکه هنگام حذف نمودن یک dangling image خطا مشابه زیر مشاهده شد:
Error response from daemon: conflict: unable to delete 4c67203d7e62 (must be forced) - image is being used by stopped container c2a5edafa303
این بدین معنی است که کانتینر با آیدی c2a5edafa303 که در حال حاضر stop میباشد در حال استفاده از ایمیج با آیدی ۴c67203d7e62 است. برای حذف این ایمیج ابتدا میبایست کانتینر مورد نظر را remove نمایید و سپس مجدد ایمیج را حذف کنید.
$ docker rm c2a5edafa303 $ docker rmi 4c67203d7e62
برای اینکه به مشکل بالا نخورید، قبل از حذف ایمیجهای none، ابتدا تمامی کانتینرهای stop شده خود را remove نمایید و سپس اقدام به حذف dangling image ها نمایید.
برای حذف کانتینرهای stop شده از دستور زیر استفاده نمایید:
$ docker rm $(docker ps -a|grep "Exited"|awk '{print $1}')
چرا خودتون رو اذیت کنید اینقدر
براحتی بزنید:
docker image prune
سلام خیلی ممنون ازینکه به سایت ما سر زدین.
اگر از آپشن prune استفاده کنین تمام ایمیج هاییکه درحال استفاده نیستن (منظورم کانتینری ازشون درحال اجرا نیست) پاک میشه. مثلا ممکنه یه ایمیج nginx داشته باشین که کانتینری ازش ایجاد نشده اون رو هم پاک میکنه! هدف ازین پست حذف ایمیج هایی هست که در هنگام بیلد به عنوان ایمیج های واسط یا همون intermediate ایجاد میشن و تگ ندارن.