डॉक रजिस्ट्री वी 2 पर छवियों की सूची कैसे प्राप्त करें


203

मैं डॉकटर रजिस्ट्री v1 का उपयोग कर रहा हूं और मैं नए संस्करण, v2 पर माइग्रेट करने में रुचि रखता हूं। लेकिन मुझे रजिस्ट्री पर मौजूद छवियों की एक सूची प्राप्त करने के लिए किसी तरह की आवश्यकता है; उदाहरण के लिए रजिस्ट्री v1 के साथ मैं एक GET अनुरोध निष्पादित कर सकता हूं http://myregistry:5000/v1/search?और परिणाम है:

{
  "num_results": 2,
  "query": "",
  "results": [
    {
      "description": "",
      "name": "deis/router"
    },
    {
      "description": "",
      "name": "deis/database"
    }
  ]
}

लेकिन मैं रजिस्ट्री पर छवि की सूची प्राप्त करने के लिए आधिकारिक दस्तावेज पर कुछ नहीं पा सकता हूं । किसी को भी नए संस्करण v2 पर ऐसा करने का एक तरीका पता है?


अभी भी पूरा नहीं। छवि निर्माण और छवि पुश की तारीखों की आवश्यकता है, और पूर्व टैग संस्करणों को उम्मीद से शामिल / दबाएं। वहाँ एक वास्तविक वेब इंटरफेस हो गया है, भी, है ना? मैं हमारे व्यवस्थापक से बात कर रहा हूं - हमने केवल
एंड्रयू

जवाबों:


404

रजिस्ट्री V2 के नवीनतम (2015-07-31) संस्करण के लिए, आप इस चित्र को DockerHub से प्राप्त कर सकते हैं :

docker pull distribution/registry:master

सभी रिपोजिटरी की सूची (प्रभावी रूप से चित्र):

curl -X GET https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}

भंडार के लिए सभी टैग सूचीबद्ध करें:

curl -X GET https://myregistry:5000/v2/ubuntu/tags/list
> {"name":"ubuntu","tags":["14.04"]}

3
आपको प्रमाण पत्र कहां से मिलेगा?
द्वितीया_

3
यदि आपकी रजिस्ट्री किसी स्व-हस्ताक्षरित प्रमाण पत्र, या एक अविश्वसनीय रूट CA द्वारा हस्ताक्षरित प्रमाण पत्र का उपयोग कर रही है, तो आपको एक सुरक्षित कनेक्शन स्थापित करने के लिए प्रमाणपत्र को कर्ल करने की आवश्यकता है। असुरक्षित कनेक्शन बनाने के लिए आप इसके बजाय '--insecure' ध्वज जोड़ सकते हैं।
जोनाथन

5
-k, --insecure (SSL)
Ilja

9
डिफ़ॉल्ट परिणाम केवल 100 छवियों का रिकॉर्ड दिखाते हैं, लेकिन अगर आपको और अधिक दिखाने की आवश्यकता है तो आप इस प्रश्न के साथ परिणाम पा सकते हैं: http://<registry-url>/v2/_catalog?n=<count>उदाहरण के लिए 2000 की गिनती के साथ।
किकिकर्बोनेल

17
रजिस्ट्री पासवर्ड सुरक्षित है, का उपयोग करते हैंcurl -u <user>:<pass> -X GET ...
nsantos

77

आप खोज सकते हैं

http: // <ip/hostname>: <port>/ v2 / _catalog


4
... जैसा कि हाल ही में मैं जोड़ना चाहूंगा कि http
निकोला

2
मुझे अपनी हाल ही में स्थापित डॉकर रजिस्ट्री के लिए ऐसी कोई आवश्यकता नहीं दिख रही है!
एनोक 82२

43

कैटलॉग प्राप्त करें

डिफ़ॉल्ट, रजिस्ट्री एपीआई वापसी 100 प्रविष्टियों की सूची, वहाँ कोड है :

जब आप रजिस्ट्री को कर्ल करते हैं:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

यह : के बराबर है

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=100

यह एक पेजेशन मैथॉन्ड है।

जब 100 से अधिक प्रविष्टियों का योग, आप दो तरीकों से कर सकते हैं:

पहला : एक बड़ी संख्या दें

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=2000

Sencond : अगले लिंकर यूआरएल पार्स

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

प्रतिक्रिया हैडर में निहित एक लिंक तत्व:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

प्रतिक्रिया हैडर:

Link: </v2/_catalog?last=pro-octopus-ws&n=100>; rel="next"

लिंक तत्व में इस अनुरोध की अंतिम प्रविष्टि है, तो आप अगले 'पेज' का अनुरोध कर सकते हैं:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?last=pro-octopus-ws

यदि प्रतिक्रिया शीर्ष लेख में लिंक तत्व है, तो आप इसे लूप में कर सकते हैं ।

चित्र प्राप्त करें

जब आपको कैटलॉग का परिणाम मिलता है, तो यह इस प्रकार है:

{ "repositories": [ "busybox", "ceph/mds" ] }

आप हर कैटलॉग में चित्र प्राप्त कर सकते हैं:

curl --cacert domain.crt https://your.registry:5000/v2/busybox/tags/list

रिटर्न:

{"name":"busybox","tags":["latest"]}



2
यह स्वीकृत उत्तर होना चाहिए। यह एकमात्र उत्तर है जो बताता है कि आप खतरनाक खूबी के आसपास कैसे पहुंचते हैं। वर्तमान में स्वीकृत उत्तर (जोनाटन) केवल "ए" से शुरू होने वाली छवियों को दर्शाता है।
user2394284

और आपको टैग सूची कैसे मिलेगी ceph/mds? सामान्य तौर पर, किसी भी रिपॉजिटरी के साथ परिभाषित के लिए /- /v2/_catalog/ceph/mdt/tags/listकाम नहीं करता है
tymik

25

Https://github.com/docker/distribution से उपलब्ध डॉकर रजिस्ट्री का नवीनतम संस्करण कैटलॉग एपीआई का समर्थन करता है। (v2 / _catalog)। यह रिपॉजिटरी खोजने की क्षमता के लिए अनुमति देता है

यदि रुचि है, तो आप नए डॉकर रजिस्ट्री वितरण ( https://github.com/vivekjuneja/docker_registry_cli ) में खोज सुविधाओं का उपयोग करने के लिए आसान बनाने के लिए निर्मित docker छवि रजिस्ट्री CLI I की कोशिश कर सकते हैं


21

हमने इस उद्देश्य के लिए एक CLI उपकरण लिखा है: docker-ls यह आपको docker रजिस्ट्री ब्राउज़ करने की अनुमति देता है और टोकन या मूल स्रोत के माध्यम से प्रमाणीकरण का समर्थन करता है।


21

यह मुझे पागल कर रहा है, लेकिन मैंने अंत में सभी टुकड़ों को एक साथ रखा है। 1/25/2015 के अनुसार, मैंने पुष्टि की है कि डॉक 2 वी रजिस्ट्री में छवियों को सूचीबद्ध करना संभव है (जैसा कि @jonatan ऊपर उल्लेख किया गया है।)

मैं उस उत्तर को वोट करूंगा, अगर मेरे पास इसके लिए रिपीट था।

इसके बजाय, मैं उत्तर पर विस्तार करूंगा। चूंकि रजिस्ट्री V2 को सुरक्षा को ध्यान में रखते हुए बनाया गया है, इसलिए मुझे लगता है कि इसे स्व-हस्ताक्षरित प्रमाण पत्र के साथ सेट अप करना शामिल करना उचित है , और कंटेनर को उस प्रमाण पत्र के साथ चलाएं, ताकि उस प्रमाण पत्र के साथ एक https कॉल किया जा सके:

यह वह स्क्रिप्ट है जिसका उपयोग मैं वास्तव में रजिस्ट्री शुरू करने के लिए करता हूं:

sudo docker stop registry
sudo docker rm -v registry
sudo docker run -d \
  -p 5001:5001 \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /data/registry:/var/lib/registry \
  -v /root/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ 
  -e REGISTRY_HTTP_DEBUG_ADDR=':5001' \
  registry:2.2.1

यह कुछ के लिए स्पष्ट हो सकता है, लेकिन मैं हमेशा कुंजियों और समारोहों के साथ मिश्रित हो जाता हूं। जिस फ़ाइल को कॉल करने के लिए संदर्भित करने की आवश्यकता है @jonaton का उल्लेख ** के ऊपर है, ऊपर सूचीबद्ध domain.crt है। (जब से मैंने domain.crt डाला है /root, मैंने उपयोगकर्ता निर्देशिका में एक प्रतिलिपि बनाई जहाँ इसे एक्सेस किया जा सकता है।)

curl --cacert ~/domain.crt https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}

** ऊपर दिए गए कमांड को बदल दिया गया है: -X GET वास्तव में तब काम नहीं करता था जब मैंने इसे आज़माया था।

नोट: https://myregistry:5000(जैसा कि ऊपर) जनरेट किए गए प्रमाणपत्र से दिए गए डोमेन से मेल खाना चाहिए।


10

रजिस्ट्री स्थापित करें: 2.1.1 या बाद में (आप पिछले एक की जांच कर सकते हैं, यहां ) और सूची प्राप्त करने के लिए जीईटी / वी 2 / _catalog का उपयोग करें।

https://github.com/docker/distribution/blob/master/docs/spec/api.md#listing-repositories

शैल स्क्रिप्ट उदाहरण द्वारा लिस्ट सभी चित्र: https://gist.github.com/OndrejP/a2386d08e5308b0776c0


7

यहाँ एक अच्छा सा एक लाइनर (JQ का उपयोग करता है) रिपोज और संबंधित टैग की एक सूची का प्रिंट आउट करने के लिए।

यदि आपने jqस्थापित नहीं किया है तो आप उपयोग कर सकते हैं:brew install jq

# This is my URL but you can use any
REPO_URL=10.230.47.94:443

curl -k -s -X GET https://$REPO_URL/v2/_catalog \
 | jq '.repositories[]' \
 | sort \
 | xargs -I _ curl -s -k -X GET https://$REPO_URL/v2/_/tags/list

argh, मैंने अभी यह लिखा है: तुम्हारा पाया: S, लेकिन मैं अपना जवाब रखूंगा क्योंकि यह दिखाता है कि बेसिक को भी कैसे हैंडल करना है, और यह बताता है कि यह काम क्यों करता है। परिणाम को एक फ्लैट छवि सूची में फ़िल्टर करता है।
क्रेग रिंगर

बस के मामले में jq आपके लिनक्स डिस्ट्रो में नहीं है, उसे उसका stedolan.github.io/jq/download प्राप्त करें यह बहुत उपयोगी छोटा उपकरण है।
ISQ

5

मुझे यहाँ और ऊपर के कार्यों को करना था, सिवाय इसके कि मुझे लॉगिन विवरण प्रदान करना था क्योंकि यह एक स्थानीय डॉक्युमेंट रिपॉजिटरी था।

यह ऊपर के अनुसार है, लेकिन URL में उपयोगकर्ता नाम / पासवर्ड की आपूर्ति के साथ।

curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog

यह बिना जोड़ JSON के रूप में वापस आता है।

मैंने इसे मानव प्रारूप में आसानी से पढ़ने के लिए अजगर सूत्र के माध्यम से पाइप किया, यदि आप इसे इस प्रारूप में रखना चाहते हैं।

curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog | python -m json.tool

4

"/ V2 / _catalog" और "/ टैग / सूची" का उपयोग करके आप वास्तव में सभी छवियों को सूचीबद्ध नहीं कर सकते हैं। यदि आप कुछ अलग छवियों को धक्का दिया और उन्हें "नवीनतम" टैग किया तो आप वास्तव में पुरानी छवियों को सूचीबद्ध नहीं कर सकते हैं! आप अभी भी उन्हें खींच सकते हैं यदि आप उन्हें "डाइकर पुल ubuntu @ sha256: ac13c5d2 ..." का उपयोग करके संदर्भित करते हैं। तो इसका उत्तर है - छवियों को सूचीबद्ध करने का कोई तरीका नहीं है आप केवल उन टैगों को सूचीबद्ध कर सकते हैं जो समान नहीं हैं


3

अगर इस पर कुछ दूर मिलता है।

अन्य लोगों ने जो पहले ही ऊपर कहा है उसे लेना। यहां एक-लाइनर है जो उत्तर को एक पाठ फ़ाइल में स्वरूपित करता है, जोसन है।

curl "http://mydocker.registry.domain/v2/_catalog?n=2000" | jq . - > /tmp/registry.lst

ऐसा दिखता है

{
  "repositories": [
    "somerepo/somecontiner",
    "somerepo_other/someothercontiner",
 ...
  ]
}

आपके पास कितने कंटेनर हैं, इसके लिए आपको 'n = xxxx' को बदलने की आवश्यकता हो सकती है।

अगला स्वचालित रूप से पुराने और अप्रयुक्त कंटेनरों को हटाने का एक तरीका है।


2

डॉकर खोज रजिस्ट्री v2 कार्यक्षमता वर्तमान में इस लेखन के समय समर्थित नहीं है। फरवरी 2015 से चर्चा देखें: "रजिस्ट्री खोज कार्यक्षमता का प्रस्ताव # 206" https://github.com/docker/distribution/sues/206

मैंने एक स्क्रिप्ट लिखी है जिसे आप पा सकते हैं: https://github.com/BradleyA/Search-docker-registry-v2-script.1.0 यह सुंदर नहीं है, लेकिन इसे निजी रजिस्ट्री से आवश्यक जानकारी मिलती है।


2

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

यह आपको विभिन्न तरीकों से अप्रयुक्त छवियों को हटाने की अनुमति देता है, जैसे किसी एकल छवि के पुराने टैग या सभी छवियों आदि को हटाना। यह सुविधाजनक है जब आप सीआई सर्वर से अपनी रजिस्ट्री भर रहे हैं और केवल नवीनतम / स्थिर संस्करण रखना चाहते हैं।

यह अजगर में लिखा गया है और आपको भारी बड़ी कस्टम रजिस्ट्री छवियों को डाउनलोड करने की आवश्यकता नहीं है।


2

यहां एक उदाहरण दिया गया है जो रजिस्ट्री पर सभी छवियों के सभी टैग को सूचीबद्ध करता है। यह HTTP बेसिक ऑर्टिफिकेशन के लिए कॉन्फ़िगर की गई रजिस्ट्री को भी हैंडल करता है।

THE_REGISTRY=localhost:5000

# Get username:password from docker configuration. You could
# inject these some other way instead if you wanted.
CREDS=$(jq -r ".[\"auths\"][\"$THE_REGISTRY\"][\"auth\"]" .docker/config.json | base64 -d)

curl -s --user $CREDS https://$THE_REGISTRY/v2/_catalog | \
    jq -r '.["repositories"][]' | \
    xargs -I @REPO@ curl -s --user $CREDS https://$THE_REGISTRY/v2/@REPO@/tags/list | \
    jq -M '.["name"] + ":" + .["tags"][]'

स्पष्टीकरण:

  • उद्धरण उपयोगकर्ता नाम: .docker / config.json से पासवर्ड
  • सभी "रिपॉजिटरी" को सूचीबद्ध करने के लिए रजिस्ट्री में एक https अनुरोध करें
  • जीन्स के परिणाम को रिपॉजिटरी नामों की एक फ्लैट सूची को फ़िल्टर करें
  • प्रत्येक रिपॉजिटरी नाम के लिए:
  • उस "रिपॉजिटरी" के लिए सभी "टैग" को सूचीबद्ध करने के लिए रजिस्ट्री से एक https अनुरोध करें
  • "रिपोजिटरी", "रिपॉजिटरी": "टैग" जोड़े, प्रत्येक रिपॉजिटरी में पाए गए प्रत्येक टैग के लिए "टैग" जोड़ते हुए, रिजल्ट जसन ऑब्जेक्ट्स की स्ट्रीम को फ़िल्टर करें

1

यह थ्रेड्स एक लंबे समय के बाद वापस आते हैं, सबसे अधिक उपकरण है जो एक पर विचार करना चाहिए skopeoऔर crane

skopeoहस्ताक्षर करने का समर्थन करता है और कई अन्य विशेषताएं हैं, जबकि craneथोड़ा अधिक न्यूनतर है और मुझे एक सरल शेल स्क्रिप्ट में एकीकृत करना आसान लगा।


0

चूंकि प्रत्येक रजिस्ट्री कंटेनर के रूप में चलती है, इसलिए कंटेनर ID में एक संबद्ध लॉग फ़ाइल ID-json.log है। इस लॉग फ़ाइल में vars.name = [image] और vars.reference = [tag] है। एक स्क्रिप्ट का उपयोग इनको एक्सट्रपलेशन और प्रिंट करने के लिए किया जा सकता है। यह शायद रजिस्ट्री V2-2.0.1 के लिए धक्का छवियों को सूचीबद्ध करने के लिए एक विधि है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.