docker - 推送到 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 是否改变了关于推送到其容器注册表的任何内容?我错过了一些项目设置吗?
解决方案
引用不存在的资源也会导致requested access to the resource is denied
. 令人困惑,但在幕后某处可能是合乎逻辑的(令牌仅对当前存储库有效,对其他人无效,或者请求的资源不存在,因此不能拥有任何权限)。
因此,如果您因莫名其妙的原因收到此错误,请仔细检查名称以查找难以发现的拼写错误。
在这种情况下,调用了 GitLab 存储库,ci-images-server
而我试图推送到ci-image-server
。
推荐阅读
- r - 根据按列名分组的列计算矩阵每一行的汇总统计
- bash - 在 Bash 中计算 PowerShell 刻度
- r - 获取行索引以更新循环中的另一个数据帧
- reactjs - Axios 和 Typescript 给出一个类型的 promise 拒绝错误
- javascript - 以编程方式从输入中删除选中的属性
- python-3.x - 迭代数组列表以用作函数的输入
- c++ - 传递 lvlaue 时,decltype 不会产生 lvlaue 引用
- java - 如何在 Spring Boot 中捕获来自 Rest Template 的错误响应?
- java - 创建名为“solverManager”的 bean 时出错,通过构造函数参数表示的依赖关系不满足
- mfc - 是否有可在 MFC SDI 应用程序中使用的 SuspendLayout() 和 ResumeLayout() 函数或其等效函数?