繁体   English   中英

拒绝:将图像推送到 gitlab 注册表时请求访问资源被拒绝

[英]denied: requested access to the resource is denied when pushing image to gitlab registry

我正在尝试将图像推送到 gitlab 注册表。

我已经做过很多次了,所以我想知道为什么会出现此错误。

我用最新的标签构建图像:

Successfully tagged registry.gitlab.com/mycompany/rgpd_api:latest

然后我登录并推送:

docker login registry.gitlab.com -u gitlab+deploy-token-91931 
docker push registry.gitlab.com/mycompany/rgpd_api:latest

但我得到:

The push refers to repository [registry.gitlab.com/mycompany/rgpd_api]
be679cc302b9: Preparing 
denied: requested access to the resource is denied

我给了gitlab+deploy-token-91931 token read_repositoryread_registry权限。

我的回购是:

https://gitlab.com/mycompany/rgpd_api

我查看了文档页面:https://docs.gitlab.com/ee/user/project/container_registry.html

但是当我通过 Gitlab CI 和gitlab-ci-token

我可以正常推动它。

我也尝试重新生成一个新令牌,但仍然是同样的问题。

我该如何解决?

我也偶然发现了这个问题,结果证明

  • 组级部署令牌可用于将映像推送到组级容器注册表,类似于具有 API 访问权限或其他适用范围的 PAT 令牌。
  • 图像必须使用与组内现有项目匹配的标签进行标记。
  • 任何标记不同的图像都将被拒绝并denied: requested access to the resource is denied错误消息。

因此,使用以下设置:

  • 名为mytest的 GitLab 组
  • 该组中的项目称为hello-world
  • 标记为registry.gitlab.com/mytest/hello-world的 Docker 镜像
  • 部署为整个组创建的令牌
  • Docker 守护程序授权通过cat "<deploy_token>" | docker login -u "<token_username>" --password-stdin registry.gitlab.com cat "<deploy_token>" | docker login -u "<token_username>" --password-stdin registry.gitlab.com

您将得到以下结果:

  • 成功推送docker push registry.gitlab.com/mytest/hello-world ,因为该项目存在于组内
  • denied: requested access to the resource is denied如果您尝试推送标有项目名称但组中不存在的项目名称(如docker push registry.gitlab.com/mytest/no-project ),则请求的资源访问被拒绝

因此,必须再次标记图像以匹配组中的现有路径,例如组或子组中的现有项目。

我的错误是使用部署令牌将图像推送到注册表。

部署令牌可用于拉取镜像,但不能推送。

因此,您可以生成个人访问令牌。 您应该至少添加权限:

read_registry, write_registry

确保您在设置中有正确的配置。

转到项目的设置,然后“可见性、项目功能、权限”并检查“容器注册表:每个项目都可以有自己的空间来存储其 Docker 映像”(仅限成员或所有人,由您决定)。 否则,推拉将被拒绝。

这发生在我身上,这就是我解决它的方法。

您可以让docker logout your registry并重新登录。 它正在重新创建您的令牌。 就我而言,这项工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM