بعد الوثائق الرسمية (https://docs.docker.com/registry/spec/api/#deleting-an-image) لقد تمكنت من حذف صورة بنجاح. كما هو متوقع ، بعد الحذف ، لم يعد من الممكن سحب الصورة أو استدعاء بيانها عبر واجهة برمجة التطبيقات.
أشعر أنني قد حصلت على الجزء الصعب القيام به, ومع ذلك ، فإن المشكلة هي أن الريبو لا يزال مدرجا تحت /v2/_catalog
بعد الانتهاء من الحذف. أحاول تطهير السجل بالكامل.
هنا هو ملف إنشاء السجل الخاص بي:
registry: image: registry:2.5.2 container_name: registry-test ports: - 5007:5000 environment: REGISTRY_STORAGE: s3 REGISTRY_HTTP_TLS_CERTIFICATE: /etc/cert.crt REGISTRY_HTTP_TLS_KEY: /etc/cert.key REGISTRY_STORAGE_S3_ACCESSKEY: ****** REGISTRY_STORAGE_S3_SECRETKEY: ****** REGISTRY_STORAGE_S3_REGION: us-west-1 REGISTRY_STORAGE_S3_BUCKET: ****** REGISTRY_STORAGE_S3_SECURE: "true" REGISTRY_STORAGE_DELETE_ENABLED: "true" volumes: - /dockerdata/volumes/registry-test/etc/cert.crt:/etc/cert.crt - /dockerdata/volumes/registry-test/etc/cert.key:/etc/cert.key restart: unless-stopped
هنا هو الأسلوب رفيع المستوى على ما فعلته لحذف الصورة:
جمع ملخص الصورة:
HEAD https://myprivateregistry:5001/v2/myimage/manifests/mytag
مع"Accept: application/vnd.docker.distribution.manifest.v2+json"
تضاف إلى رأس على المكالمةمفتاح رأس إرجاع المكالمة
Docker-Content-Digest
مع قيمة مثلsha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd
باستخدام هذه القيمة من الخطوة 2 ، قم بتشغيل استدعاء الحذف:
DELETE https://myprivateregistry:5001/v2/myimage/manifests/sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd
إرجاع واجهة برمجة تطبيقات التسجيل
202 Accepted
تشغيل جمع القمامة يدويا:
registry garbage-collect /etc/docker/registry/config.yml
جامع القمامة حذف النقط المرتبطة من القرص (سجل حذف هنا ، لكنه حذف بنجاح النقط)
في هذه المرحلة ، يمكنني تأكيد حذف النقط تماما من القرص ولم يعد بإمكاني الاتصال بتفاصيل الصورة (كما في الخطوة 1 أعلاه) حتى ظننت أنني قد فعلت.
ومع ذلك ، عند تشغيل: /v2/_catalog
لا يزال الريبو المرتبط بي يسرد (على الرغم من عدم وجود صور بداخله)! من الواضح أنه لا يمكن سحبها أو استخدامها ، ولكن كيف يمكنني إزالة هذا الريبو بالكامل من تلك القائمة الآن لأنه لا يحتوي على صور مرتبطة به?
لا أرى في أي مكان كيف صحيح قم بإزالة هذا من صفحة وثائق واجهة برمجة التطبيقات. ربما أنا في عداد المفقودين في مكان ما?
تحرير -
كنت أرغب في إضافة المزيد من المعلومات حول كيفية ظهور السجل قبل وبعد حدوث الحذف أعلاه.
قبل عملية الحذف أعلاه:
docker/registry/v2/repositories/myimage/_manifests/revisions/...docker/registry/v2/repositories/myimage/_manifests/tags/... docker/registry/v2/repositories/myimage/_layers/sha256/... (5 layers listed)docker/registry/v2/blobs/sha256/...
بعد عملية الحذف أعلاه:
docker/registry/v2/repositories/myimage/_layers/sha256/... (5 layers listed)
لذا فإن الشيء الوحيد المتبقي هو _layers
الدليل مع نفس 5س طبقات المدرجة. ويبدو أن هذا هو السبب في انها لا تزال مدرجة على _catalog
عندما أحذف myimage
مجلد (من docker/registry/v2/repositories/myimage
) ثم لم يعد يظهر المستودع في _catalog
يبدو أن هذه طريقة لتطهيرها من _catalog
قائمة. ومع ذلك-ماذا لو كانت الصورة تحتوي على علامات 2 ، ولكن تم حذف 1 فقط-هل هناك سبب لحذف أي شيء من _layers
في هذه الحالة? كيف يمكن التعامل مع ذلك بإصدارات متعددة من الصورة? من الواضح أنني لا يمكن أن مجرد قضم _layers
الدليل كطريقة نهائية لأنه ، في العالم الحقيقي ، سيكون هناك العديد من الإصدارات الموسومة للصورة. لذلك يجب القيام بذلك بذكاء.
أنا ببساطة أجد صعوبة في العثور على أي وثائق حول صيانة / صيانة سجل عامل الإرساء ولا المخطط الخاص بـ
_layers
الدليل الفرعي ولماذا جامع القمامة لا تنظيف هذا الدليل نفسه يفعل مع البيانات والنقط.