首页 > 解决方案 > 推送到 GitLab 容器注册表不再有效

问题描述

我之前在 GitLab 上创建了一个 Docker 镜像,它只包含一个 Dockerfile 和一个.gitlab-ci.yml像这样的文件:

build_image:
  image: docker:git
  services:
  - docker:dind
  script:
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
    - docker build -t registry.gitlab.com/user149408/ci-image-server:$CI_COMMIT_REF_NAME .
    - docker push registry.gitlab.com/user149408/ci-image-server:$CI_COMMIT_REF_NAME

这适用于我在 2020 年 5 月上旬创建的上一个项目。该项目的 Container Registry 向我展示了一个图像,此后我已成功地将其用于各种 CI 工作。

现在我尝试创建一个新项目,再次使用这两个文件。在.gitlab-ci.yml我刚刚更改了项目名称(两者的用户名相同)。

现在 CI/CD 管道失败docker push了:

denied: requested access to the resource is denied

登录成功,构建完成。

在研究了 GitLab 文档之后,我还尝试了其他身份验证选项,但每次我得到完全相同的行为:

docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
docker login -u $CI_JOB_USER -p $CI_JOB_TOKEN $CI_REGISTRY

这里有什么问题?在过去的 9 个月里,GitLab 是否改变了关于推送到其容器注册表的任何内容?我错过了一些项目设置吗?

标签: dockergitlabgitlab-ci

解决方案


引用不存在的资源也会导致requested access to the resource is denied. 令人困惑,但在幕后某处可能是合乎逻辑的(令牌仅对当前存储库有效,对其他人无效,或者请求的资源不存在,因此不能拥有任何权限)。

因此,如果您因莫名其妙的原因收到此错误,请仔细检查名称以查找难以发现的拼写错误。

在这种情况下,调用了 GitLab 存储库,ci-images-server而我试图推送到ci-image-server


推荐阅读