我想知道如何使用CLI(首选)或curl 列出远程Docker注册表(我们案例中的tutum,但我认为不重要)的Docker镜像的所有标签?最好不要从远程注册表中提取所有版本,我只想列出标签.
小智 152
我从这里得到了答案.非常感谢!:)
只需一行脚本:(查找debian的所有标签)
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}'
Run Code Online (Sandbox Code Playgroud)
更新感谢@ degelf的建议.这是shell脚本.
#!/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}"
Run Code Online (Sandbox Code Playgroud)
你可以创建一个新的文件名,dockertags,在/ usr/local/bin目录(或添加PATH环境到你的.bashrc/ .zshrc),并把这些代码在里面.然后添加可执行权限(chmod +x dockertags).
用法:
dockertags ubuntu --->列出ubuntu的所有标签
dockertags php apache --->列出包含'apache'的所有php标签
Yan*_*oto 75
从Docker Registry V2开始,GET就足够了:
GET /v2/<name>/tags/list
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅文档
Joh*_*han 17
我已经设法使用curl工作了:
curl -u <username>:<password> https://tutum.co/v1/repositories/<username>/<image_name>/tags
Run Code Online (Sandbox Code Playgroud)
请注意,image_name不应包含用户详细信息等.例如,如果您正在推送已命名的图像,tutum.co/username/x那么image_name应该是x.
0xC*_*xCC 17
如果要使用docker registry v2 API,它会按页面列出标记.要列出图像的所有标记,您可能希望向网址添加大的page_size参数,例如
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/centos/tags?page_size=1024'|jq '."results"[]["name"]'
Run Code Online (Sandbox Code Playgroud)
sig*_*ice 16
如果JSON解析工具jq可用
wget -q https://registry.hub.docker.com/v1/repositories/debian/tags -O - | \
jq -r '.[].name'
Run Code Online (Sandbox Code Playgroud)
sch*_*rer 13
截至 2023 年,有许多工具可以做到这一点
docker run --rm ghcr.io/regclient/regctl:v0.4.5 tag ls ghcr.io/regclient/regctl
docker run --rm quay.io/skopeo/stable:v1.9.2 list-tags docker://quay.io/skopeo/stable \
| jq -r '.Tags[]'
docker run --rm gcr.io/go-containerregistry/crane ls gcr.io/go-containerregistry/crane
docker run --rm r.j3ss.co/reg:v0.16.1 tags r.j3ss.co/reg
Run Code Online (Sandbox Code Playgroud)
顺便说一句 - 还有更多的工具。这个列表看起来很全面:
iximiuz/awesome-container-tinkering。
Rob*_*V8R 11
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
}
Run Code Online (Sandbox Code Playgroud)
例
docker-tags "microsoft/nanoserver" "microsoft/dotnet" "library/mongo" "library/redis"
Run Code Online (Sandbox Code Playgroud)
不可否认,docker-tags做出了几个假设.具体而言,OAuth请求参数大多是硬编码的.更雄心勃勃的实现将向注册表提出未经身份验证的请求,并从未经身份验证的响应中获取OAuth参数.
Buv*_*mar 11
您可以通过 cli列出带有skopeo和jq用于 json 解析的所有标签。
skopeo --override-os linux inspect docker://httpd | jq '.RepoTags'
Run Code Online (Sandbox Code Playgroud)
skopeo --override-os linux inspect docker://httpd | jq '.RepoTags'
Run Code Online (Sandbox Code Playgroud)
对于外部注册表:
[
"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"
]
Run Code Online (Sandbox Code Playgroud)
注意:--override-os linux仅当您不在 linux 主机上运行时才需要。例如,如果您在 MacOS 上使用它,您将获得更好的结果。
Aki*_*ing 11
podmanPodman 是 docker 的直接替代品,具有更多功能,主要区别在于它不需要守护进程并且不以 root 身份运行。如果您正在使用podman,则可以使用podman search
# podman search --list-tags <image name> --limit 1000
podman search --list-tags docker.io/alpine --limit 1000
Run Code Online (Sandbox Code Playgroud)
有一个docker命令,但我找不到该list-tags选项。
请参阅 CLI 实用程序:https : //www.npmjs.com/package/docker-browse
允许枚举标签和图像。
docker-browse tags <image>将列出图像的所有标签。例如docker-browse tags library/alpine
docker-browse images将列出注册表中的所有图像。目前不适用于index.docker.io.
您可以将其连接到任何注册表,包括您的私有注册表,只要它支持 Docker Registry HTTP API V2
在Yan Foto的答案(v2 API)的基础上,我创建了一个简单的Python脚本来列出给定图像的标签。
用法:
./docker-registry-list.py alpine
Run Code Online (Sandbox Code Playgroud)
输出:
{
"name": "library/alpine",
"tags": [
"2.6",
"2.7",
"3.1",
"3.2",
"3.3",
"3.4",
"3.5",
"3.6",
"3.7",
"edge",
"latest"
]
}
Run Code Online (Sandbox Code Playgroud)
这是我为 Windows 编写的 Powershell 脚本。处理 v1 和 v2 存储库:
获取 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
}
Run Code Online (Sandbox Code Playgroud)
您可以通过在终端上运行来实现:
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq . | grep name
Run Code Online (Sandbox Code Playgroud)
另外,如果您没有 jq,则必须通过以下方式安装它
sudo apt-get install jq
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
170326 次 |
| 最近记录: |