当前位置: 首页 > 面试题库 >

如何使用HTTP API从gcr.io Docker注册表中列出图像和标签?

宣望
2023-03-14
问题内容

我正在尝试从Node.js中的Google Container Registry(gcr.io)获取可用图像及其标签的列表。

我首先使用google-auto- auth来获取具有scope的令牌https://www.googleapis.com/auth/devstorage.read_write,然后将该令牌交换为gcr.io令牌,如下所示:

axios.get('https://gcr.io/v2/token?service=gcr.io', {
  auth: {
    username: '_token',
    password: token // token I got from `google-auto-auth`
  }
})

然后,我尝试使用此方法来调用v2/_catalog端点:

axios.get('https://gcr.io/v2/_catalog', {
  headers: {
    Authorization: `Bearer ${gcrToken}`
  }
})

我得到以下错误:

{ 
  errors: [ { code: 'DENIED', message: 'Failed to retrieve projects.' } ] 
}

足够公平,它必须提供我的项目ID,但是我应该在哪里提供呢?

只是为了看看我是否还能使其他任何东西正常工作,我尝试了:

axios.get('https://gcr.io/v2/my-project-id/my-image/tags/list', {
  headers: {
    Authorization: `Bearer ${gcrToken}`
  }
})

我得到以下信息:

{ 
  errors: [ 
    { 
      code: 'NAME_INVALID', 
      message: 'Requested repository does not match bearer token resource: my-project-id/my-image' 
    } 
  ] 
}

如何从gcr.io读取图像信息?


问题答案:

在与GCR的乔恩·约翰逊(Jon
Johnson)进行广泛交流之后,我们终于弄清楚了哪里出了问题。如果您赞成这个答案,请也赞成乔恩(Jon’s),他超越了这一点,以解决此问题。

截止本文撰写之时,其中大部分内容尚未记录在案。

  • 需要使用registry:catalog:*范围。
  • 我的图像被推送到us.gcr.io,并将它们视为单独的注册表-我认为它们是镜子。
  • 服务帐户必须Project Viewer在Google Cloud IAM中具有角色。
  • 您可以使用GCR令牌以及Google Cloud令牌。但是,尽管GCR令牌不能与一起使用Basic base64(_token:<token>),但Google Cloud令牌可以使用。

获取GCR令牌

// Updated host
axios.get('https://us.gcr.io/v2/token?service=gcr.io', {
  params: {
    service: 'us.gcr.io',
    scope: `registry:catalog:*`
  },
  auth: {
    username: '_token',
    password: token // token I got from `google-auto-auth`
  },  
})

使用令牌列出存储库

const client = axios.create({
  baseURL: `https://us.gcr.io/v2`,
  headers: {
    Authorization: `Bearer ${token}`
  }
})

client.get('/_catalog').then((response) => {
  console.log(response.data.repositories)
})


 类似资料:
  • 如何使用CLI(首选)或curl列出远程Docker注册表上Docker图像的所有标记? 最好不从远程注册表中提取所有版本。我只想列出标签。

  • 问题内容: 我运行了一个私有Docker注册表,我想从存储库中删除除之外的所有图像。我不想删除整个存储库,仅删除其中的一些图像。该API文档不提一个办法做到这一点,但肯定这是可能的? 问题答案: 当前,您无法将注册表API用于该任务。它仅允许您删除存储库或特定标签。 通常,删除存储库意味着删除与此仓库关联的所有标签。 删除标签意味着删除图像和标签之间的关联。 以上所有都不删除单个图像。它们留在您的

  • 问题内容: 我正在使用docker Registry v1,并且有兴趣迁移到较新的版本v2。但是我需要某种方式来获取注册表中存在的图像列表。例如,对于注册表v1,我可以执行GET请求,结果是: 但是我在官方文档中找不到类似于在注册表中获取映像列表的内容。有人知道在新版本v2上执行此操作的方法吗? 问题答案: 对于最新(截至2015年7月31 日)的Registry V2版本,您可以从DockerH

  • 问题内容: 将图像推送到Amazon ECR时,如果该代码已存在于存储库中,则旧图像仍保留在注册表中,但处于未标记状态。 因此,如果我第二次泊坞窗推入,我会这样做(前提是发生了某些变化),因此第一张图像不会被标记。 有没有一种方法可以安全地清除未标记图像中的所有注册表? 问题答案: 我实际上伪造了一线解决方案 它正在做什么: 获取所有存储库 为每个存储库给我所有图像 对于每个图像和存储库,发出一个

  • 问题内容: 我做了一个私人注册表,curl xx.xx.xx.xx:5000还可以。我通过执行以下操作将映像推送到docker私有注册表中: 返回: 问题是如何从注册表网站或命令中获取所有图像。我无法从Docker Registry API找到任何信息。有人帮忙吗?:) 问题答案: 从私有注册表 v 0.7.0开始,您可以执行以下操作: 然后您将获得一个json负载: 提供更多背景信息,这是我启动