원격 레지스트리에 Docker 이미지의 모든 태그를 나열하는 방법은 무엇입니까?
CLI (선호) 또는 curl을 사용하여 원격 Docker 레지스트리에 Docker 이미지의 모든 태그를 나열하는 방법을 알고 싶습니다. 원격 레지스트리에서 모든 버전을 가져 오지 않고 태그를 나열하고 싶습니다.
나는 여기 에서 대답을 얻었다 . 고마워요! :)
한 줄짜리 스크립트 :( 데비안의 모든 태그를 찾으십시오)
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 / 지방 / 빈에서 (또는 경로의 ENV를 추가 .bashrc
/ .zshrc
), 그 안에 그 코드를 넣어. 그런 다음 실행 권한 ( chmod +x dockertags
)을 추가하십시오 .
용법:
dockertags ubuntu
---> 우분투의 모든 태그를 나열
dockertags php apache
---> 'apache'를 포함하는 모든 PHP 태그를 나열합니다.
Docker Registry V2에서 간단한 GET
것으로 충분합니다.
GET /v2/<name>/tags/list
자세한 내용은 문서 를 참조하십시오 .
curl을 사용하여 작동하도록했습니다.
curl -u <username>:<password> https://tutum.co/v1/repositories/<username>/<image_name>/tags
참고 image_name
명명 된 이미지를 추진하는 경우 예를 들어 등 사용자의 세부 사항을 포함 할 수 없습니다 tutum.co/username/x
다음 image_name
되어야한다 x
.
docker registry v2 API를 사용하려면 페이지별로 태그를 나열합니다. 이미지의 모든 태그를 나열하려면 URL에 큰 page_size 매개 변수를 추가하십시오 (예 :
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/centos/tags?page_size=1024'|jq '."results"[]["name"]'
Docker V2 API에는 적절한 클레임이있는 OAuth 베어러 토큰이 필요합니다. 제 생각에 공식 문서는 주제에 대해 다소 모호합니다. 다른 사람들이 내가했던 것과 같은 고통을 겪지 않도록 아래 docker-tags
기능을 제공합니다 .
의 최신 버전을 docker-tags
내 GitHubGist 에서 찾을 수 있습니다 : "bash를 사용하여 Docker 이미지 태그 나열" .
docker-tags 함수는 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 매개 변수를 파생시킵니다.
Yan Foto의 답변 ( v2 api )을 바탕으로 주어진 이미지의 태그를 나열 하는 간단한 Python 스크립트를 만들었습니다 .
용법:
./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"
]
}
CLI 유틸리티 참조 : https://www.npmjs.com/package/docker-browse
태그와 이미지를 열거 할 수 있습니다.
docker-browse tags <image>
이미지의 모든 태그를 나열합니다. 예 :docker-browse tags library/alpine
docker-browse images
will list all images in the registry. Not currently available for index.docker.io
.
You may connect it to any registry, including your private one, so long as it supports Docker Registry HTTP API V2
If the JSON parsing tool, jq
is available
wget -q https://registry.hub.docker.com/v1/repositories/debian/tags -O - | \
jq -r .[].name
You can also use this scrap :
# vim /usr/sbin/docker-tags
& Append Following (as it is):
#!/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
Make it Executable :
# chmod 755 /usr/sbin/docker-tags
Then Finally Try By :
$ docker-tags testexampleidontexist
[-] No Image Found with name => [ testexampleidontexist ]
$ docker search ubuntu
$ docker-tags teamrock/ubuntu
latest
[ Hope you are aware of $ & # before running any command ]
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'
You can use it if your env has no 'jq', = )
Here's a Powershell script I wrote for Windows. Handles v1 and v2 repos:
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
}
To view all available tags in a browser:
https://registry.hub.docker.com/v1/repositories/<username>/<image_name>/tags
i.e. https://hub.docker.com/r/localstack/localstack/tags
Or, you can get a json response using this endpoint:
https://registry.hub.docker.com/v1/repositories/localstack/localstack/tags
Get all tags from Docker Hub: this command uses the command-line JSON
processor jq
to select the tag names from the JSON
returned by the Docker Hub Registry (the quotes are removed with tr
). Replace library with the Docker Hub user name, debian with the image name:
curl -s 'https://registry.hub.docker.com/v2/repositories/library/debian/tags/' | jq -r '."results"[]["name"]'
I have done this thing when I have to implement a task in which if user somehow type the wrong tag then we have to give the list of all the tag present in the repo(Docker repo) present in the register. So I have code in batch Script.
<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>
So in this we can give arguments to out batch file like:
Dockerfile java version7
The Docker Registry API has an endpoint to list all tags.
Looks like Tutum has a similar endpoint, as well as a way to access via tutum-cli.
With the tutum-cli, try the following:
tutum tag list <uuid>
You can achieve by running on terminal this:
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq . | grep name
Also, if you don't have jq you have to install it by
sudo apt-get install jq
This is a build in functionality of docker:
docker images gitlabregistry.domain.com/path/to-app
Results in
REPOSITORY TAG IMAGE ID CREATED SIZE
gitlabregistry.domain.com/path/to-app 3.0.1 f60f49fba3e0 2 months ago 148MB
...
'Programing' 카테고리의 다른 글
build.gradle 파일에 주석을 작성하는 구문은 무엇입니까? (0) | 2020.06.04 |
---|---|
왜 자식이 "파일을 병합 해제했기 때문에 풀을 사용할 수 없습니다"라고 표시합니까? (0) | 2020.06.04 |
UIViewController viewDidLoad 대 viewWillAppear : 적절한 분업은 무엇입니까? (0) | 2020.06.04 |
기본 ES6 약속에서 Bluebird Promise.finally에 해당하는 것은 무엇입니까? (0) | 2020.06.04 |
IIS를 디버깅 할 때 Visual Studio Attach 보안 경고 해제 (0) | 2020.06.04 |