JFrog Artifactory为其Docker注册表使用什么标记端点?

问题描述 投票:3回答:1

我正在尝试编写基本上可以在发布到私有JFrog Artifactory的图像上执行docker inspect的代码,而无需实际拉动图像本身。我一直在使用名为Inspecting Docker images without pull的指南来分析API调用。该指南使用公共Docker Hub注册表作为其基础 - 而不是Artifactory - 这有点不同。

基本上,需要进行3次API调用:

  1. 首先获得一个令牌
  2. 然后获取给定图像/标签的“摘要”
  3. 最后得到与该摘要相对应的配置

我将Artifactory配置为允许匿名读取访问。因此,任何知道URL的人都可以在不需要提供凭据的情况下执行docker pull,并且它可以正常工作。我已经证实了这一点。

因为它允许匿名访问,所以我首先假设我可以跳过API调用#1(获取令牌)并直接进入API调用#2(查找摘要)而不提供令牌。然而,这种情况并非如此。在这种情况下,Artifactory会返回UNAUTHORIZED错误。

接下来我想,好吧,好吧,我只是点击令牌端点。但是,我将把它更改为我的Artifactory服务器的子域,并将其更改为auth.docker.io端点,而不是/token。那没用。然后我发掘了this portion of the official ContainerD code,它实际上有一个专门针对JFrog Artifactory内置的条件案例。

当您尝试POST到/token端点时,看起来Artifactory返回401(未授权),而且Docker客户端也知道这一点,因此回退到尝试GET请求。但是这里对我来说有点模糊。我不是Golang程序员,因此我很难理解Docker CLI Go代码中发生了什么。

我假设它只是将POST更改为GET,否则使用相同的URL(即/v2/token)。但是,这不起作用。当我尝试命中该端点时,我仍然得到一个UNAUTHORIZED响应。进一步查看ContainerD code,看起来它可能是使用用户名和密码设置基本身份验证。但我不确定这些值是什么,因为这是通过匿名访问完成的。很显然,它在我的Artifactory服务器上击中了一些令牌端点,因为运行docker pull是成功的。我只是想知道回退API调用真的是什么样子?什么参数/ headers / auth需要传递给它?

docker artifactory docker-registry
1个回答
-1
投票

Artifactory允许您通过其Web界面手动创建API密钥(单击您的用户配置文件),然后您可以使用此密钥代替子序列API调用的密码。密钥可以持续到你刷新它。

See here on how to use the key/token

对于程序化令牌管理,Artifactory的令牌api与docker.io没有相同的端点,请参阅their documentation here

© www.soinside.com 2019 - 2024. All rights reserved.