सर्वर पर फ़ाइलों/फ़ोल्डरों को हटाकर रजिस्ट्री में डॉकर छवि निकालें

मुझे डॉकर-रजिस्ट्री वी 2 में एक छवि या टैग हटाने के साथ निम्नलिखित समस्या है:

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

वर्तमान फ्रंटएंड संस्करण ऐसी कार्यक्षमता का समर्थन नहीं करता है ।

मैंने इसे एक के माध्यम से आजमाया curl -u MY_USERNAME -X DELETE MY_DOMAIN:PORT/v2/IMAGE_NAME/manifests/REFERENCE कमांड, जैसे HTTP API reference राज्यों, और पासवर्ड दर्ज किया है, लेकिन निष्पादन एक खाली लाइन में हुई, कोई प्रमाणीकरण त्रुटि (प्रमाणीकरण सक्रिय है) या सफलता संदेश । टैग अभी भी उपलब्ध है ।

चूंकि मेरे पास सर्वर तक पहुंच है, इसलिए मैं निम्नलिखित विचार के साथ आया:क्या मैं बस और सुरक्षित रूप से फ़ोल्डर को हटा सकता हूं v2/repositories/IMAGE_NAME/_manifests/tags/VERSION (या कोई अन्य फ़ाइल / फ़ोल्डर)? या इसके परिणामस्वरूप रजिस्ट्री टूट जाती है? रजिस्ट्री सेवा को रोकने जैसे प्रारंभिक चरण क्या हैं, क्या मुझे करना है?

हाँ, उन्होंने इसे आसान नहीं बनाया और यह अभी भी सही नहीं है, लेकिन वी 2 रजिस्ट्री एपीआई में अब छवियों को हटाने की क्षमता है ।

क्या मैं बस और सुरक्षित रूप से फ़ोल्डर वी 2/रिपॉजिटरी/छवि_नाम/_मैनिफेस्ट/टैग/संस्करण को हटा सकता हूं

वास्तविक छवि डेटा डिस्क पर ब्लॉब्स निर्देशिका में संग्रहीत किया जाता है, लेकिन उन्हें अलग-अलग मैनिफ़ेस्ट के बीच साझा किया जाता है, इसलिए उस निर्देशिका को शुद्ध करना सुरक्षित नहीं है जब तक कि आपने उन सभी छवियों पर विचार नहीं किया है जो ब्लॉब्स साझा कर सकते हैं ।

वी 2 डॉकर एपीआई का उपयोग करके एक छवि को हटाने की विधि यहां दी गई है:

सबसे पहले, आपकी रजिस्ट्री को हटाना सक्षम होना चाहिए । या तो एनवी संस्करण सेट करें:

REGISTRY_STORAGE_DELETE_ENABLED: "true"

या config.वाईएमएल को सेट करना होगा

storage:  delete:    enabled: true

इसके बाद, एपीआई कॉल के माध्यम से विलोपन चलाएं (आप आसानी से डाकिया के माध्यम से परीक्षण कर सकते हैं या सिर्फ कर्ल/आदि का उपयोग कर सकते हैं)

नोट: नीचे कॉल में, जोड़ें "Accept: application/vnd.docker.distribution.manifest.v2+json" करने के लिए HTTP शीर्ष लेख

  1. छवि डाइजेस्ट इकट्ठा करें:

    HEAD https://myprivateregistry:5001/v2/<image_name>/manifests/<image_tag>

    यह कॉल हेडर कुंजी देता है Docker-Content-Digest इस तरह एक मूल्य के साथ: sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd

  2. चरण 2 से उस मान का उपयोग करके, चलाएँ DELETE http कॉल:

    DELETE https://myprivateregistry:5001/v2/<image_name>/manifests/sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd

    एपीआई रिटर्न 202 Accepted

  3. यदि आप इसके अगले निर्धारित रन की प्रतीक्षा नहीं करना चाहते हैं तो कचरा संग्रह मैन्युअल रूप से चलाएं: registry garbage-collect /etc/docker/registry/config.yml

    उदाहरण यदि रजिस्ट्री को कंटेनर के रूप में चलाना है: docker exec -t registry-test ./bin/registry garbage-collect /etc/docker/registry/config.yml

    कचरा कलेक्टर आपके लिए डिस्क से संबंधित ब्लब्स और मैनिफेस्ट को हटा देता है ।

इस बिंदु पर छवि:टैग डिस्क से पूरी तरह से हटा दिया गया है और रजिस्ट्री से शुद्ध किया गया है । बूँदें हटा दी जाती हैं और आप मैनिफ़ेस्ट से चले गए देखेंगे v2/repositories/<image_name>/_manifests

नोट: यदि यह आपके रेपो में अंतिम छवि थी, तो आपको अभी भी डिस्क से रेपो लिस्टिंग को मैन्युअल रूप से हटाना होगा (v2/repositories/<image_name>/_layers)- हालांकि यह सिर्फ मेटाडेटा है । वास्तविक छवि डेटा पहले ही हटा दिया गया है । मेरा मानना है कि यह कचरा कलेक्टर में एक बग हो सकता है । मेरे पास इसके बारे में एक सवाल है: डॉकर निजी रजिस्ट्री-सभी छवियों को हटा दिया, लेकिन फिर भी कैटलॉग में दिखा रहा है

अधिक जानकारी:

https://docs.docker.com/registry/spec/api/#deleting-an-imagehttps://jsosic.wordpress.com/2017/01/23/deleting-images-from-docker-registry/