从命令行列出Docker Hub上的私有Docker repos(使用访问令牌)

xlpyo6sf  于 2023-01-01  发布在  Docker
关注(0)|答案(1)|浏览(123)

如果您使用访问令牌登录,是否可以从命令行列出或搜索Docker Hub在线版本上的私有Docker存储库?我假设curl命令不起作用,因为您无法使用访问令牌登录到Web界面(这是我在Docker上尝试各种curl命令的经验),您可以使用Web API吗?
我尝试过各种基于curl和API的解决方案(例如How to get a list of images on docker registry v2),但它们大多适用于私有注册表,而不是Docker Hub上的私有回购

kyvafyod

kyvafyod1#

理想情况下,我希望能够列出和/或搜索该用户的存储库(即公共和私有,假设我有一个访问令牌,允许我拉取这些私有存储库)
这只需要Docker Hub的自定义工具,它是作为实验性的hub-tool存在的。它没有内置到其他工具中,因为注册表中的存储库列表API不限于用户或组织。出于扩展、隐私和安全原因,查询所有存储库的API在大多数SaaS注册表中被禁用。对于hub-tool,用于此目的的命令如下所示:

$ hub-tool repo ls $user_or_org --format json

以及每个存储库中的标签
这要简单得多。它可以从注册表API和Hub特定API获得。对于hub-tool,这是:

$ hub-tool tag ls $org/$repo --format json

(In我使用json格式,假设您希望编写输出脚本。)
其他工具适用于任何注册表,包括Google的起重机、RedHat的skopeo和我自己的regclient。

$ crane ls $repo
$ skopeo list-tags docker://$reppo
$ regctl tag ls $repo

每种方法都有不同的方式来登录您的PAT。

$ hub-tool login
$ crane auth login $registry
$ skopeo login $registry
$ regctl registry login $registry

使用curl时,你需要使用你的用户名和PAT登录以获取令牌。这是Hub特有的,所以我建议使用上面的工具而不是curl来移植到其他注册中心:

$ cat ./manifest-v2-auth.sh
#!/bin/sh

ref="${1:-library/ubuntu:latest}"
sha="${ref#*@}"
if [ "$sha" = "$ref" ]; then
  sha=""
fi
wosha="${ref%%@*}"
repo="${wosha%:*}"
tag="${wosha##*:}"
if [ "$tag" = "$wosha" ]; then
  tag="latest"
fi
token=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${repo}:pull" \
             -u "$username:$user_pat" \
        | jq -r '.token')
curl -H "Authorization: Bearer $token" \
     -s "https://registry-1.docker.io/v2/${repo}/tags/list" | jq .

相关问题