मैं एक दूरस्थ रजिस्ट्री पर डॉकर छवि के लिए सभी टैग कैसे सूचीबद्ध कर सकता हूं?


206

मैं CLI (पसंदीदा) या कर्ल का उपयोग करके दूरस्थ डॉकर रजिस्ट्री पर डॉकरी छवि के सभी टैग कैसे सूचीबद्ध कर सकता हूं?

अधिमानतः दूरस्थ रजिस्ट्री से सभी संस्करणों को खींचने के बिना। मैं सिर्फ टैग सूचीबद्ध करना चाहता हूं।



1
मैंने docker(1) github.com/docker/for-linux/issues/455
Winny

जवाबों:


177

मुझे यहाँ से जवाब मिल गया । आपका बहुत बहुत धन्यवाद! :)

बस एक-लाइन-स्क्रिप्ट: (डेबियन के सभी टैग ढूंढें)

wget -q https://registry.hub.docker.com/v1/repositories/debian/tags -O -  | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n'  | awk -F: '{print $3}'

अद्यतन @ degelf की सलाह के लिए धन्यवाद। यहाँ शैल लिपि है।

#!/bin/bash

if [ $# -lt 1 ]
then
cat << HELP

dockertags  --  list all tags for a Docker image on a remote registry.

EXAMPLE: 
    - list all tags for ubuntu:
       dockertags ubuntu

    - list all php tags containing apache:
       dockertags php apache

HELP
fi

image="$1"
tags=`wget -q https://registry.hub.docker.com/v1/repositories/${image}/tags -O -  | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n'  | awk -F: '{print $3}'`

if [ -n "$2" ]
then
    tags=` echo "${tags}" | grep "$2" `
fi

echo "${tags}"

आप बस एक नया फ़ाइल नाम बना सकते हैं dockertags, के तहत / usr / लोकल / बिन (या अपने .bashrc/ में एक पाथ एनवी को जोड़ सकते हैं .zshrc), और उस कोड को इसमें डाल दें। फिर निष्पादन योग्य अनुमतियाँ ( chmod +x dockertags) जोड़ें ।

उपयोग:

dockertags ubuntu --- - ubuntu के सभी टैग की सूची

dockertags php apache --- 'अपाचे' युक्त सभी php टैग php को सूचीबद्ध करें।


1
आप इसे गूंजने के लिए [backtick] ...[backtick] में एक पंक्ति में पूरी बात लपेट सकते हैं । और / या $ 1 के साथ "डेबियन" को बदल दिया और इसे "डॉकर्टैग्स" नामक एक स्क्रिप्ट में / usr / स्थानीय / बिन के तहत डाल दिया। फिर समापन बैकटिक से पहले आप जोड़ सकते हैं | grep $ 2। फिर chmod + x यह, और फिर आप अपाचे वाले सभी php टैग्स को देखने के लिए "dockertags php apache" पर जा सकते हैं।
दिनांक

8
wget -q https://registry.hub.docker.com/v1/repositories/circleci/ruby/tags -O - | jq -r '.[].name'अगर आपने jqस्थापित किया है
Tanner

1
मैंने V2 API के लिए एक अद्यतन उत्तर पोस्ट किया है
RobV8R

1
sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'बहुत अधिक साफ-साफ लिखा हैtr -d '[]" '
विलियम पर्सेल

1
मैंने उपयोगकर्ता नाम के रूप में दूसरे स्थितीय तर्क का उपयोग करने के लिए संशोधित किया: पासवर्ड ताकि मैं कर्ल के लिए आउटगोइंग को स्विच कर सकूं और userauth="-u ${2}"मुझे अनुमति देने के लिए उपयोग कर सके ${userauth}(यदि यह खाली नहीं है तो यू टॉगल या परमेस)। यह निजी रेपो का उपयोग करने में किसी की भी मदद कर सकता है
MrMesees

79

डॉकर रजिस्ट्री वी 2 के रूप में, एक साधारण GETपर्याप्त:

GET /v2/<name>/tags/list

अधिक के लिए डॉक्स देखें ।


3
डॉक्स में टैग उपधारा में जानकारी के आधार पर , इस GET को प्राधिकरण की आवश्यकता प्रतीत होती है, इसलिए v1 एपीआई + sedएक त्वरित जांच के लिए उपयोग करने के लिए वास्तव में सरल प्रतीत होता है ...
akavel

3
यदि आपको "अनधिकृत" त्रुटि मिल रही है, तो मेरा वैकल्पिक उत्तर देखें । मूल उत्तर पोस्ट करने वाले व्यक्ति के लिए कोई अपराध नहीं। मुझे काम करने के लिए उपरोक्त उत्तर प्राप्त करने के लिए अतिरिक्त कदम उठाना पड़ा और दूसरों की मदद करना चाहता था।
RobV8R

23

यदि आप docker रजिस्ट्री v2 API का उपयोग करना चाहते हैं, तो यह पृष्ठों द्वारा टैग सूचीबद्ध करता है। किसी छवि के सभी टैगों को सूचीबद्ध करने के लिए, आप url में एक बड़ा page_size पैरामीटर जोड़ना चाहेंगे, उदा

curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/centos/tags?page_size=1024'|jq '."results"[]["name"]'

2
डॉकर हब पृष्ठ_साइज़ को प्रभावी अधिकतम 100 तक सीमित करता प्रतीत होता है।
शेन

2
@ शाने ओह सच में? मैंने उस कई पृष्ठों के साथ एक छवि का सामना नहीं किया है। क्या कोई url https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101काम करता है?
0xCC

2
javaछवि एक अच्छा उदाहरण है। हां, आप रजिस्ट्री . hub.docker.com/v2/repositories/library/java/tags/… जैसी चीजें कर सकते हैं । उदाहरण के लिए परिणाम में लिंक nextऔर previousलिंक देखें ।
शेन

19

Docker V2 API को उपयुक्त दावों के साथ OAuth बियरर टोकन की आवश्यकता है। मेरी राय में, आधिकारिक प्रलेखन विषय पर अस्पष्ट है। ताकि अन्य लोग उसी दर्द से न गुज़रें जो मैंने किया था, मैं नीचे दिए गए docker-tagsकार्य की पेशकश करता हूं ।

docker-tagsमेरे GitHubGist में सबसे हाल के संस्करण को पाया जा सकता है : "बैश का उपयोग करके डॉकटर छवि टैग करें"

डॉक-टैग फ़ंक्शन की jq पर निर्भरता है । यदि आप JSON के साथ खेल रहे हैं, तो आपको पहले से ही इसकी संभावना है।

#!/usr/bin/env bash
docker-tags() {
    arr=("$@")

    for item in "${arr[@]}";
    do
        tokenUri="https://auth.docker.io/token"
        data=("service=registry.docker.io" "scope=repository:$item:pull")
        token="$(curl --silent --get --data-urlencode ${data[0]} --data-urlencode ${data[1]} $tokenUri | jq --raw-output '.token')"
        listUri="https://registry-1.docker.io/v2/$item/tags/list"
        authz="Authorization: Bearer $token"
        result="$(curl --silent --get -H "Accept: application/json" -H "Authorization: Bearer $token" $listUri | jq --raw-output '.')"
        echo $result
    done
}

उदाहरण

docker-tags "microsoft/nanoserver" "microsoft/dotnet" "library/mongo" "library/redis"

माना जाता है, docker-tagsकई धारणाएँ बनाता है। विशेष रूप से, OAuth अनुरोध पैरामीटर ज्यादातर हार्ड कोडित हैं। एक अधिक महत्वाकांक्षी कार्यान्वयन रजिस्ट्री के लिए एक अनौपचारिक अनुरोध करेगा और अनौथेंटेड प्रतिक्रिया से OAuth मापदंडों को प्राप्त करेगा।


3
इसकी कोई आवश्यकता नहीं है arr=("$@")। बस लिखोdocker-tags() { for item; do ....
विलियम पर्ससेल

इसके लिए शुक्रिया। उस टोकन को प्राप्त करना मुझे पागल कर रहा था।
फेलिशियनोटेक

17

मैं कर्ल का उपयोग करके इसे प्राप्त करने में कामयाब रहा हूं:

curl -u <username>:<password> https://tutum.co/v1/repositories/<username>/<image_name>/tags

ध्यान दें कि image_nameउपयोगकर्ता विवरण आदि शामिल नहीं होने चाहिए। उदाहरण के लिए यदि आप नाम की छवि को आगे बढ़ा रहे हैं tutum.co/username/xतो image_nameहोना चाहिए x


1
V2 समापन बिंदु यहां प्रलेखित है: docs.docker.com/registry/spec/api/#listing-image-tags
morloch

1
यह tutum.co वेबसाइट क्या है जो आप कहते हैं कि मुझे उन्हें अपना डॉकहॉब लॉगिन और पासवर्ड देना चाहिए?
Nakilon

1
@Nakilon जब मैंने यह उत्तर लिखा था, कई साल पहले, टुटम एक सेवा थी जो एक निजी डॉकटर रजिस्ट्री प्रदान करती थी। और मैं उन्हें अपना पासवर्ड नहीं दे रहा हूं, मैं https पर मानक HTTP मूल प्रमाणीकरण का उपयोग करके उनकी सेवा के साथ प्रमाणित करता हूं।
जोहान

टुटम अब मौजूद नहीं है। क्या आप अपने उत्तर को अपडेट कर सकते हैं ताकि लोग गलती से अपनी विश्वसनीयता को उस डोमेन के मालिक को न भेजें।
opyh

6

यान फोटो के उत्तर ( v2 एपीआई ) पर निर्माण, मैंने एक साधारण पायथन स्क्रिप्ट बनाई जो किसी दिए गए चित्र के लिए टैग सूचीबद्ध करने के लिए है

उपयोग:

./docker-registry-list.py alpine

आउटपुट:

{
  "name": "library/alpine",
  "tags": [
    "2.6",
    "2.7",
    "3.1",
    "3.2",
    "3.3",
    "3.4",
    "3.5",
    "3.6",
    "3.7",
    "edge",
    "latest"
  ]
}

6

यदि JSON पार्सिंग टूल jqउपलब्ध है

wget -q https://registry.hub.docker.com/v1/repositories/debian/tags -O - | \
    jq -r '.[].name'

1
'.[].name'
Jq के

1
@Soullivaneuh क्या मुद्दे उद्धरण के बिना हो सकता है? धन्यवाद!
सिगाजाइस

Zsh के साथ, मैं निम्नलिखित त्रुटि है: no matches found: .[].name। लेकिन यह बैश पर अच्छी तरह से काम करता है, शायद यह आपका डिफ़ॉल्ट शेल है?
सौलिवेनुह

@Soullivaneuh धन्यवाद! मैंने jqकमांड में उद्धरण जोड़ दिए हैं
सिग्यूइस

4

सीएलआई उपयोगिता देखें: https://www.npmjs.com/package/docker-browse

टैग और छवियों की गणना की अनुमति देता है।

docker-browse tags <image>छवि के लिए सभी टैग सूचीबद्ध करेगा। जैसेdocker-browse tags library/alpine

docker-browse imagesरजिस्ट्री में सभी छवियों को सूचीबद्ध करेगा। वर्तमान में उपलब्ध नहीं है index.docker.io

आप इसे अपने निजी सहित किसी भी रजिस्ट्री से जोड़ सकते हैं, इसलिए जब तक यह डॉकर रजिस्ट्री HTTP एपीआई V2 का समर्थन करता है


3

किसी ब्राउज़र में सभी उपलब्ध टैग देखने के लिए:

https://registry.hub.docker.com/v1/repositories/<username>/<image_name>/tags

यानी https://hub.docker.com/r/localstack/localstack/tags

या, आप इस समापन बिंदु का उपयोग करके एक json प्रतिक्रिया प्राप्त कर सकते हैं:

https://registry.hub.docker.com/v1/repositories/localstack/localstack/tags


2

आप इस स्क्रैप का उपयोग भी कर सकते हैं:

# vim /usr/sbin/docker-tags 

निम्नलिखित (जैसा भी हो) का पालन करें:

#!/bin/bash
im="$1"
[[ -z "$im" ]] && { echo -e '\e[31m[-]\e[39m Where is the image name ??' ; exit ; }
[[ -z "$(echo "$im"| grep -o '/')" ]] && { link="https://hub.docker.com/r/library/$im/tags/" ; } || { link="https://hub.docker.com/r/$im/tags/" ; }
resp="$(curl -sL "$link")"
err="$(echo "$resp" | grep -o 'Page Not Found')"
if [[ ! -z "$err" ]] ; then
    echo -e "\e[31m[-]\e[39m No Image Found with name => [ \e[32m$im\e[39m ]"
    exit
else
    tags="$(echo "$resp"|sed  -e 's|}|\n|g' -e 's|{|\n|g'|grep '"result"'|sed -e 's|,|\n|g'|cut -d '[' -f2|cut -d ']' -f1|sed  '/"tags":/d'|sed -e 's|"||g')"
    echo -e "\e[32m$tags\e[39m"
fi

इसे निष्पादित करें:

# chmod 755 /usr/sbin/docker-tags

फिर अंत में प्रयास करके देखें:

$ docker-tags testexampleidontexist
   [-] No Image Found with name => [ testexampleidontexist ]

$ docker search ubuntu

$ docker-tags teamrock/ubuntu
   latest

[आशा है कि आप किसी भी आदेश को चलाने से पहले $ & # के बारे में जानते होंगे ]


2
curl -u <username>:<password> https://$your_registry/v2/$image_name/tags/list -s -o - | \
    tr -d '{' | tr -d '}' | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | \
    awk -F: '{print $3}' | sed -e 's/,/\n/g'

आप इसका इस्तेमाल कर सकते हैं यदि आपके ईएनवी में कोई 'jq' नहीं है, =)


2

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

curl -s 'https://registry.hub.docker.com/v2/repositories/library/debian/tags/' | jq -r '."results"[]["name"]'

2
कृपया इस बात का एक छोटा स्पष्टीकरण जोड़ने पर विचार करें कि यह प्रश्न का उत्तर क्यों देता है, यह क्या करता है, ...
τ.τοι 28.17

2

यहाँ एक Powershell स्क्रिप्ट है जो मैंने विंडोज के लिए लिखी है। V1 और v2 रेपो संभालती है:

Get-DockerImageVersions.ps1:

param (
  [Parameter (Mandatory=$true)]$ImageName,
  [Parameter (Mandatory=$false)]$RegistryURL
)

if (!$RegistryURL) 
{
  $RegistryURL = "https://registry.hub.docker.com/v1/repositories"
}

$list = ""
if ($RegistryURL -like "*v2*") 
{
  $list = "/list"
}

$URL = "$RegistryURL/$ImageName/tags$list"

write-debug $URL
$resp = Invoke-WebRequest -UseBasicParsing $URL | ConvertFrom-Json

if ($RegistryURL -like "*v2*") 
{
  $tags = $resp | select tags
  $tags.tags
} else {
  $tags = $resp | select name
  $tags.name
}

2

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

curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq . | grep name

इसके अलावा, अगर आपके पास jq नहीं है, तो आपको इसे स्थापित करना होगा

sudo apt-get install jq

curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq .results[].name आपको एक grep कमांड
बचाएगी

संस्करण 1 का उपयोग करना:curl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
danilo

1

मैंने यह काम तब किया है जब मुझे एक कार्य को लागू करना है जिसमें यदि उपयोगकर्ता किसी तरह गलत टैग टाइप करता है तो हमें रजिस्टर में मौजूद सभी टैग (डॉकटर रेपो) में मौजूद टैग की सूची देनी होगी। इसलिए मेरे पास बैच स्क्रिप्ट में कोड है।

<html>
<pre style="background-color:#bcbbbb;">
@echo off

docker login --username=xxxx --password=xxxx
docker pull %1:%2

IF NOT %ERRORLEVEL%==0 (
echo "Specified Version is Not Found "
echo "Available Version for this image is :"
for /f %%i in (' curl -s -H "Content-Type:application/json" -X POST -d "{\"username\":\"user\",\"password\":\"password\"}" https://hub.docker.com/v2/users/login ^|jq -r .token ') do set TOKEN=%%i
curl -sH "Authorization: JWT %TOKEN%" "https://hub.docker.com/v2/repositories/%1/tags/" | jq .results[].name
)
</pre>
</html>

तो इसमें हम बैच फ़ाइल को आउट करने के लिए तर्क दे सकते हैं जैसे:

Dockerfile जावा संस्करण 7 


1

डॉकर रजिस्ट्री एपीआई में सभी टैग को सूचीबद्ध करने के लिए एक समापन बिंदु है ।

ऐसा लगता है कि टुटम में एक समान समापन बिंदु है , साथ ही साथ टुटम-क्ली के माध्यम से पहुंचने का एक तरीका है ।

टुटम-क्ली के साथ, निम्नलिखित प्रयास करें:

tutum tag list <uuid>

1
मुझे नहीं लगता कि यह रजिस्ट्री छवियों के लिए काम करता है। मुझे बस एक "आइडेंटिफायर '<आईडी> मिलता है जो किसी भी सेवा, नोड या नोडलस्टर से मेल नहीं खाता है।"
जोहान

1

शक्तियां 5.1 में, मेरे पास एक साधारण सूची_डॉकर_इमेज_टैग.प्स 1 स्क्रिप्ट है:

[CmdletBinding()]
param (
    [Parameter(Mandatory = $true)]
    [string]
    $image
)

$url = "https://registry.hub.docker.com/v1/repositories/{0}/tags" -f $image 
Invoke-WebRequest $url  | ConvertFrom-Json | Write-Output

फिर मैं इस तरह 4.7 टैग्स के लिए grep कर सकता हूं:

./list_docker_image_tags.ps1 microsoft/dotnet-framework | ?{ $_.name -match "4.7" }

1

आप स्कोपो के साथ सभी टैग सूचीबद्ध कर सकते हैं ।

அ  ~  skopeo inspect docker://httpd |jq .RepoTags
[
  "2-alpine",
  "2.2-alpine",
  "2.2.29",
  "2.2.31-alpine",
  "2.2.31",
  "2.2.32-alpine",
  "2.2.32",
  "2.2.34-alpine",
  "2.2.34",
  "2.2",
  "2.4-alpine",
  "2.4.10",
  "2.4.12",
  "2.4.16",
  "2.4.17",
  "2.4.18",
  "2.4.20",
  "2.4.23-alpine",
  "2.4.23",
  "2.4.25-alpine",
  "2.4.25",
  "2.4.27-alpine",
  "2.4.27",
  "2.4.28-alpine",
  "2.4.28",
  "2.4.29-alpine",
  "2.4.29",
  "2.4.32-alpine",
  "2.4.32",
  "2.4.33-alpine",
  "2.4.33",
  "2.4.34-alpine",
  "2.4.34",
  "2.4.35-alpine",
  "2.4.35",
  "2.4.37-alpine",
  "2.4.37",
  "2.4.38-alpine",
  "2.4.38",
  "2.4.39-alpine",
  "2.4.39",
  "2.4.41-alpine",
  "2.4.41",
  "2.4.43-alpine",
  "2.4.43",
  "2.4",
  "2",
  "alpine",
  "latest"
]

बाहरी रजिस्ट्रियों के लिए:

அ  ~  skopeo inspect --creds username:password docker://<registry-url>/<repo>/<image>

0

अगर लोग RedHat रजिस्ट्री से टैग पढ़ना चाहते हैं https://registry.redhat.io/v2तो निम्न चरण हैं:

# example nodejs-12 image
IMAGE_STREAM=nodejs-12
REDHAT_REGISTRY_API="https://registry.redhat.io/v2/rhel8/$IMAGE_STREAM"
# Get an oAuth token based on a service account username and password https://access.redhat.com/articles/3560571
TOKEN=$(curl --silent -u "$REGISTRY_USER":"$REGISTRY_PASSWORD" "https://sso.redhat.com/auth/realms/rhcc/protocol/redhat-docker-v2/auth?service=docker-registry&client_id=curl&scope=repository:rhel:pull" |  jq --raw-output '.token')
# Grab the tags
wget -q --header="Accept: application/json" --header="Authorization: Bearer $TOKEN" -O - "$REDHAT_REGISTRY_API/tags/list" | jq -r '."tags"[]' 

यदि आप अपने स्थानीय ओपनहिफ्ट रजिस्ट्री में अपस्ट्रीम रजिस्ट्री.रेडॉट.कॉम में क्या है के खिलाफ तुलना करना चाहते हैं तो यहां एक पूरी स्क्रिप्ट है

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