我正在尝试将图像推送到 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
令牌read_repository
和read_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
推送到该注册表
您将获得以下结果:
- 成功推动
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
并再次登录。 它会重新创建您的令牌。 这在我的情况下有效。