我正在尝试将图像推送到 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
我可以正常推。
我也尝试重新生成一个新的令牌,但仍然是同样的问题。
我该如何修复它?
我也偶然发现了这个问题,事实证明
denied: requested access to the resource is denied
错误消息。因此,进行以下设置:
mytest
hello-world
registry.gitlab.com/mytest/hello-world
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
并重新登录。
它正在重新创建您的令牌。
这对我来说有效。
令牌权限需要
write_registry
和 read_registry
。
尽管 write_package_registry 的文档说“允许对包注册表进行读、写和删除访问。”...
只是根据我最近的经验提出解决方案:
如果您使用
sudo docker push
,它可能/很可能没有使用您保存的凭据,而是尝试使用计算机上不存在的 root
用户凭据进行身份验证。
尝试使用
docker push
进行推送,看看是否成功。