আমি কীভাবে কোনও দূরবর্তী রেজিস্ট্রিতে ডকার চিত্রের জন্য সমস্ত ট্যাগ তালিকাভুক্ত করতে পারি?


206

আমি কীভাবে সিএমএল (পছন্দসই) বা কার্ল ব্যবহার করে একটি দুরের ডকার রেজিস্ট্রিতে ডকার চিত্রের সমস্ত ট্যাগগুলি তালিকাভুক্ত করতে পারি?

সাধারণত দূরবর্তী রেজিস্ট্রি থেকে সমস্ত সংস্করণ টান ছাড়াই। আমি কেবল ট্যাগগুলি তালিকা করতে চাই।




উত্তর:


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}'

আপডেট ডেজেল্ফের পরামর্শের জন্য ধন্যবাদ। শেল স্ক্রিপ্ট এখানে।

#!/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/ ইউএসআর / স্থানীয় / বিনের অধীনে একটি নতুন ফাইলের নাম তৈরি করতে পারেন (বা আপনার .bashrc/ / তে একটি PATH এনভিভ যোগ করুন .zshrc), এবং সেই কোডটি এতে রেখে দিতে পারেন। তারপরে এক্সিকিউটেবল অনুমতিগুলি ( chmod +x dockertags) যুক্ত করুন।

ব্যবহার:

dockertags ubuntu ---> উবুন্টু এর সমস্ত ট্যাগ তালিকা

dockertags php apache ---> 'অ্যাপাচি' সম্বলিত সমস্ত পিএইচপি ট্যাগ পিএইচপি তালিকাবদ্ধ করুন


1
...এটিকে এক লাইনে ঘন করার জন্য আপনি পুরো জিনিসটি প্রতিধ্বনি [ব্যাকটিক] [ব্যাকটিক] এ মোড়তে পারেন। এবং / অথবা "ডেবিয়ান" কে $ 1 দিয়ে প্রতিস্থাপন করুন এবং এটিকে "ডকার্ট্যাগগুলি" নামে একটি স্ক্রিপ্টে / usr / স্থানীয় / বিনের অধীনে রাখুন। তারপরে ক্লোজিং ব্যাকটিকের আগে আপনি | গ্রেপ $ 2 যুক্ত করতে পারেন। তারপরে chmod + x এটি করুন, এবং তারপরে আপনি অ্যাপাচে থাকা সমস্ত পিএইচপি ট্যাগ দেখতে "ডকার্ট্যাগগুলি পিএইচপি অ্যাপাচি" যেতে পারেন।
ডেজল্ফ

8
wget -q https://registry.hub.docker.com/v1/repositories/circleci/ruby/tags -O - | jq -r '.[].name'যদি আপনি jqইনস্টল করেছেন
ট্যানার


1
sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'আরও অনেক পরিষ্কারভাবে লেখা হয়েছেtr -d '[]" '
উইলিয়াম পার্সেল

1
আমি দ্বিতীয় অবস্থানগত যুক্তিটি ব্যবহারকারীর নাম হিসাবে ব্যবহার করতে সংশোধন করেছি: পাসওয়ার্ড যাতে আমি কার্লের জন্য উইজেট স্যুইচআউট করতে পারি এবং userauth="-u ${2}"আমাকে অনুমতি দিতে ব্যবহার করতে পারি ${userauth}(যদি এটি ফাঁকা না হয় তবে টগল বা প্যারামগুলি নেই)। এটি প্রাইভেট রেপো ব্যবহার করে যে কাউকে সহায়তা করতে পারে
মিস্টারমিসিজ

79

ডকার রেজিস্ট্রি ভি 2 হিসাবে, একটি সরল GETযথেষ্ট:

GET /v2/<name>/tags/list

আরও জন্য ডক্স দেখুন।


3
দস্তাবেজগুলিতে ট্যাগগুলি সাবমিশনের তথ্যের ভিত্তিতে , এই জিইটি অনুমোদনের প্রয়োজন বলে মনে হচ্ছে, সুতরাং ভি 1 এপিআই + sedদ্রুত চেকের জন্য ব্যবহার করা সত্যই সহজ বলে মনে হচ্ছে ...
আকাশে

3
আপনি যদি "অননুমোদিত" ত্রুটি পেয়ে থাকেন তবে আমার বিকল্প উত্তর দেখুন । যিনি আসল উত্তর পোস্ট করেছেন তার কোনও অপরাধ নেই। কাজ করার জন্য উপরের উত্তর পেতে আমাকে অতিরিক্ত পদক্ষেপ নিতে হয়েছিল এবং অন্যকে সহায়তা করতে চেয়েছিলাম।
রবিভি 8 আর

23

আপনি যদি ডকার রেজিস্ট্রি ভি 2 এপিআই ব্যবহার করতে চান তবে এটি পৃষ্ঠাগুলির দ্বারা ট্যাগগুলি তালিকাভুক্ত করে। কোনও চিত্রের সমস্ত ট্যাগ তালিকাভুক্ত করতে আপনি ইউআরএলতে একটি বড় পৃষ্ঠা_ আকার পরামিতি যুক্ত করতে চান

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

2
ডকার হাব পৃষ্ঠা_ আকারকে কার্যকর সর্বাধিক 100 টিতে সীমাবদ্ধ দেখায়
শ্যান

2
@ শানে ওহ সত্যি? আমি বহু পৃষ্ঠাগুলির সাথে একটি চিত্রের মুখোমুখি হই নি। একটি ইউআরএল কি 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

ডকার ভি 2 এপিআই-এর উপযুক্ত দাবিগুলির সাথে একটি OAuth বহনকারী টোকেন প্রয়োজন। আমার মতে, সরকারী ডকুমেন্টেশন বিষয়টি সম্পর্কে অস্পষ্ট। যাতে অন্যরা আমার মতো একই বেদনা না কাটায় আমি নীচের docker-tagsফাংশনটি প্রস্তাব করি ।

আমার সাম্প্রতিকতম সংস্করণটি docker-tagsআমার গিটহাবজিস্টে পাওয়া যাবে : "ব্যাশ ব্যবহার করে ডকারের ইমেজ ট্যাগের তালিকা তৈরি করুন"

ডকার-ট্যাগ্স ফাংশনের জেকির উপর নির্ভরতা রয়েছে । আপনি যদি 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
ভি 2 সমাপ্তি এখানে ডকুমেন্ট করা হয়েছে: docs.docker.com/registry/spec/api/#listing-image-tags
morloch

1
এই টুটাম.কম ওয়েবসাইটটি কী আপনি বলছেন আমার তাদের আমার ডকারহব লগইন এবং পাসওয়ার্ড দেওয়া উচিত?
নাকিলন

1
@ নাকিলন যখন আমি এই উত্তরটি লিখেছিলাম, বেশ কয়েক বছর আগে, টুটুম এমন একটি পরিষেবা ছিল যা একটি প্রাইভেট ডকার রেজিস্ট্রি সরবরাহ করেছিল। এবং আমি আমার পাসওয়ার্ড "তাদের" দিচ্ছি না, আমি 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'
সৌলীবনেউহ

1
@ সৌলীবনেউহ কোন বিষয় উদ্ধৃত না করে হতে পারে? ধন্যবাদ!
সিগজুইস

Zsh, আমি নিম্নলিখিত ত্রুটির আছে: no matches found: .[].name। তবে এটি ব্যাশে ভাল কাজ করে, সম্ভবত এটি আপনার ডিফল্ট শেল?
সৌলেভেনিউহ

ধন্যবাদ সোলিভেনিউহ ধন্যবাদ! আমি কোট যুক্ত করেছেন jqকমান্ড
sigjuice

4

সিএলআই ইউটিলিটি দেখুন: https://www.npmjs.com/package/docker-browse

ট্যাগ এবং ইমেজ গণনার অনুমতি দেয়।

docker-browse tags <image>চিত্রের জন্য সমস্ত ট্যাগ তালিকাবদ্ধ করবে। যেমনdocker-browse tags library/alpine

docker-browse imagesরেজিস্ট্রি সমস্ত চিত্র তালিকাভুক্ত করা হবে। বর্তমানে উপলব্ধ নেই index.docker.io

আপনি এটি এতক্ষণ আপনার ডকুমেন্ট রেজিস্ট্রি এইচটিটিপি এপিআই ভি 2 সমর্থন করে ততক্ষণ আপনার ব্যক্তিগত সহ এটি যে কোনও রেজিস্ট্রিতে সংযুক্ত করতে পারেন


3

একটি ব্রাউজারে সমস্ত উপলব্ধ ট্যাগ দেখতে:

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

অর্থাৎ https://hub.docker.com/r/localstack/localstack/tags

অথবা, আপনি এই শেষ পয়েন্টটি ব্যবহার করে একটি জসন প্রতিক্রিয়া পেতে পারেন:

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'

আপনার এনভির কোনও 'জিকিউ' না থাকলে আপনি এটি ব্যবহার করতে পারেন, =)


2

ডকার হাব থেকে সমস্ত ট্যাগ পান: ডকার হাব রেজিস্ট্রি (উদ্ধৃতিগুলি দিয়ে মুছে ফেলা হয়েছে ) থেকে ট্যাগ নাম নির্বাচন করতে এই কমান্ডটি কমান্ড-লাইন JSONপ্রসেসর ব্যবহার করে । ডকার হাব ব্যবহারকারীর নাম, চিত্রের নামের সাথে ডেবিয়ান দিয়ে লাইব্রেরি প্রতিস্থাপন করুন :jqJSONtr

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

2
কেন এই প্রশ্নের প্রশ্নের উত্তর দেয়, এটি কী করে, ...
β.εηοιτ.βεβε

2

উইন্ডোজের জন্য আমি এখানে একটি পাওয়ারশেল স্ক্রিপ্ট লিখেছি। ভি 1 এবং ভি 2 রেপো পরিচালনা করে:

পান-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

এছাড়াও, আপনার কাছে জিকিউ না থাকলে আপনাকে এটি ইনস্টল করতে হবে

sudo apt-get install jq

curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq .results[].name আপনাকে একটি
গ্রেপ

সংস্করণ 1:curl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
ডানিলো

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>

সুতরাং এর মধ্যে আমরা ব্যাচ ফাইলের মতো আর্গুমেন্ট দিতে পারি:

ডকফরফিল জাভা সংস্করণ 7 


1

ডকার রেজিস্ট্রি এপিআই-এর সমস্ত ট্যাগের তালিকা করার জন্য একটি সমাপ্তি রয়েছে ।

দেখে মনে হচ্ছে টুটমের একটি সমান প্রান্ত রয়েছে , পাশাপাশি টুটুম-ক্লাইমের মাধ্যমে অ্যাক্সেস করার একটি উপায় রয়েছে ।

টুটম-ক্লাইমে, নিম্নলিখিত চেষ্টা করুন:

tutum tag list <uuid>

1
আমি মনে করি না এটি রেজিস্ট্রি চিত্রগুলির জন্য কাজ করে। আমি কেবল একটি "সনাক্তকারী" <ID> 'কোনও পরিষেবা, নোড বা নডিক্লাস্টারের সাথে মেলে না।
জোহান

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 ট্যাগের জন্য গ্রেপ করতে পারি:

./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

লোকেরা যদি রেডহ্যাট রেজিস্ট্রি থেকে ট্যাগগুলি পড়তে চায় 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"[]' 

আপনি যদি আপনার স্থানীয় ওপেনশিফ্ট রেজিস্ট্রিতে আপস্ট্রি রেজিস্ট্রি.ডাহাট ডট কমের সাথে যা আছে তার তুলনা করতে চান তবে এখানে একটি সম্পূর্ণ স্ক্রিপ্ট

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.