GitLab Docker注册表推送失败 - 访问被拒绝

时间:2017-09-19 14:16:38

标签: docker gitlab docker-registry

我无法前往GitLab Container Registry

我可以使用我的用户名和个人访问令牌成功登录但是当我尝试将图像推送到注册表时,我收到以下错误:

$ docker push registry.gitlab.com/[groupname]/dockerfiles/nodemon

The push refers to a repository 
[registry.gitlab.com/[groupname]/dockerfiles/nodemon]
15d2ea6e1aeb: Preparing 
2260f979a949: Preparing 
f8e848bb8c20: Preparing 
740a5345706a: Preparing 
5bef08742407: Preparing 
denied: requested access to the resource is denied

我认为问题不在于身份验证,因为当我运行docker login registry.gitlab.com时,我收到Login Succeeded消息。

问题出在哪里?
我应该如何将我的图像推送到GitLab Container Registry?

6 个答案:

答案 0 :(得分:3)

我通过将api范围包含在我的个人访问令牌中来实现它。

文档说明The minimal scope needed is read_registry。但这可能适用于只读访问。

参考:https://gitlab.com/gitlab-com/support-forum/issues/2370#note_44796408

答案 1 :(得分:0)

有一个类似的问题,这是因为用于标记和推送存储库的URL。

应该是

docker push registry.gitlab.com/[account or group-name]/[reponame]/imagename

答案 2 :(得分:0)

通过根据this准则添加api范围来启用个人访问令牌。创建令牌和用户名后,使用这些凭据登录到docker环境或推送。

部署在CI / CD设置下创建的令牌不足以将映像推送到Docker。

答案 3 :(得分:0)

在我看来,这真是愚蠢,甚至是gitlab错误:
创建容器注册表后,我重命名了gitlab项目,因此容器注册表URL仍使用旧名称...
gitlab下的项目名称纠正了拼写错误,但没有注册表链接,导致此错误

答案 4 :(得分:0)

先前的正确答案是说个人访问令牌需要包含api权限,并且此页面上的几个答案都准确地说了这一点。

最近,GitLab似乎改善了其权限系统的粒度。因此,如果要将容器映像推送到GitLab Docker注册表,则可以仅具有read_registrywrite_registry权限来创建令牌。这可能比授予完全权限要安全得多。

我今天已经成功测试过了。

答案 5 :(得分:0)

我遇到了同样的问题。
就我而言,问题是我之前启用了AutoDevOps,它似乎会自动生成一个部署令牌。 现在deploy tokens基本上只是用于部署的API密钥。 但是GitLab对gitlab-deploy-token有特殊处理,您可以通过$CI_DEPLOY_USER$CI_DEPLOY_PASSWORD作为预定义变量来访问它。

但是,我没有仔细检查默认令牌。 就我而言,它只有read_registry,当然,它也需要write_registry权限。

如果执行此操作,则可以按照the official documentation进行操作。

或者,您显然也可以切换到临时的$CI_REGISTRY_USER$CI_REGISTRY_PASSWORD