当前位置: 首页 > 知识库问答 >
问题:

如何使用HTTP API v2获取清单?

易焱
2023-03-14
REPO="https://hub.docker.com/v2"

我可以得到代币,列出(我的)回购,并列出他们的图像和标签。

curl --silent \
--header "Authorization: JWT ${TOKEN}" \
${REPO}/repositories/${USERNAME}/

curl --silent \
--header "Authorization: JWT ${TOKEN}" \
${REPO}/repositories/${USERNAME}/${IMAGE}/tags/

我想“获取清单”,但我很难让它工作:https://docs.docker.com/registry/spec/api/#manifest:

curl --silent \
--header "Host: hub.docker.com" \
--header "Authorization: JWT ${TOKEN}" \
${REPO}/repositories/${USERNAME}/${IMAGE}/manifests/

curl --silent \
--header "Host: hub.docker.com" \
--header "Authorization: JWT ${TOKEN}" \
${REPO}/${USERNAME}/${IMAGE}/manifests/

curl --silent \
--header "Host: hub.docker.com" \
--header "Authorization: JWT ${TOKEN}" \
${REPO}/${USERNAME}/${IMAGE}/manifests/${TAG}

我尝试过没有host头。具有host标头的各种值。但是,我显然错过了什么。我尝试了对工作endpoint的模式匹配,但没有乐趣:

curl --silent \
--header "Authorization: JWT ${TOKEN}" \
${REPO}/repositories/${USERNAME}/${IMAGE}/manifests/
REPO="https://gcr.io/v2/"

一时兴起,我尝试了“Get manifest”对GCR的攻击,请求奏效了:

curl --silent \
--request GET \
--user _token:$(gcloud auth print-access-token) \
${REPO}/${PROJECT}/${IMAGE}/manifests/${TAG}

共有1个答案

韦锦程
2023-03-14

所有的*.docker.comio子域都很混乱!
我发现registry.hub.docker.comindex.docker.io是最可靠的。

您可以从那里轻松地查询标记,但对于清单,您需要首先获得一个令牌进行提取:


REGISTRY=https://index.docker.io/v2
#REGISTRY="https://registry.hub.docker.com/v2"
#REGISTRY="https://registry.docker.io/v2"
#REGISTRY="https://registry-1.docker.io/v2"
#REGISTRY="https://hub.docker.com/v2"

REPO=library
IMAGE=debian
# Could also be a repo digest
TAG=latest

# Query tags
curl "$REGISTRY/repositories/$REPO/$IMAGE/tags/"

# Query manifest
curl -iL "$REGISTRY/$REPO/$IMAGE/manifests/$TAG"
# HTTP/1.1 401 Unauthorized
# Www-Authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="repository:library/debian:pull"

TOKEN=$(curl -sSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPO/$IMAGE:pull" \
  | jq --raw-output .token)
curl -LH "Authorization: Bearer ${TOKEN}" "$REGISTRY/$REPO/$IMAGE/manifests/$TAG"

# Some repos seem to return V1 Schemas by default

REPO=nginxinc
IMAGE=nginx-unprivileged 
TAG=1.17.2

curl -LH "Authorization: Bearer $(curl -sSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPO/$IMAGE:pull" | jq --raw-output .token)" \
 "$REGISTRY/$REPO/$IMAGE/manifests/$TAG"

# Solution: Set the Accept Header for V2

curl -LH "Authorization: Bearer $(curl -sSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$REPO/$IMAGE:pull" | jq --raw-output .token)" \
  -H "Accept:application/vnd.docker.distribution.manifest.v2+json" \
 "$REGISTRY/$REPO/$IMAGE/manifests/$TAG"

    null
 类似资料:
  • 问题内容: 我已经在服务器中下载并配置了Jenkins,我的问题是我需要通过Java访问Jenkins来执行一些过程,例如开始工作,返回当前工作任务以及返回服务器中的工作列表(全部使用Json)我试过几个代码,例如这个,但即时得到任何结果,也是我无法找到一个明确的方式来做到这一点,是有任何明确的API和例子办呢? 问题答案: 您可以通过XML 使用Jenkins API: 可以在此处找到完整的示例

  • 问题内容: 我希望我的程序可以遍历Windows系统上的所有驱动器并搜索特定的文件类型。现在,我可以运行该程序并向其传递驱动器号,但是我希望它在所有驱动器上自动搜索。目前,我需要执行以下操作: 我希望程序获取所有驱动器的列表并遍历所有驱动器,而无需用户指定驱动器号。使用Go可以吗? 类似于此问题,列出所有物理驱动器(Windows),但使用Go而不是C。 问题答案: 简便的方法是尝试打开Volke

  • 目前,我只有一排。我怎样才能得到所有的单词?目前,我有一列文字。词干分析器中的问题。它只给出一行而不是所有单词。 我的目的是清理数据并打印所有用逗号分隔的单词。 输入:df[标记]列每行中的word1、word2、word3、word4、word5 输出将是一个长列表,其中包含所有值word1、word2、word3、word4、word5、word6、word7。。。。 提前谢谢你

  • 我正在将esapi安全筛选器应用到我的应用程序中,正在使用conf.properties文件中的属性启用/禁用此安全筛选器。当它被禁用时,它工作得很好,但当它被启用时,我无法访问我的应用程序,这里是我的代码: 我已经调试了这个问题,但无法解决它。当Request.getPathInfo()被启用时,我将其作为“”获取,当它被禁用时,我将返回路径。 如何解决这个问题,请帮助我。提前谢谢。

  • 我有一些url。我想从url指向的html中获取所有href,从所有获取的hrefs中获取所有href(递归)。关键是我想设置“递归”的深度。例如,如果深度=1,我只需要来自超文本标记语言的href。如果深度=2,我需要来自超文本标记语言的hrefs(假设为list1)和来自list1的每个href的hrefs,依此类推 以下是我使用jsoup得到的结果: 我应该如何修复递归条件以使其正确?

  • 问题内容: 我正在玩弄节点,并将其安装在我的机器上。现在,我想获取机器上正在运行的进程的列表,以便查看Apache是​​否正在运行,MySQL是否已启动等?我怎样才能做到这一点?我的js文件中只有非常基本的代码。我什至不知道从哪里开始。 这是我的代码: 问题答案: 据我所知,还没有一个模块可以做这个跨平台。您可以使用子流程API来启动提供所需数据的工具。对于Windows,只需启动内置任务列表过程