You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab Registry推送Docker镜像失败:权限被拒绝问题求助

GitLab Registry推送Docker镜像权限拒绝问题排查

问题重现

配置的.gitlab-ci.yml内容如下:

build_and_push:
  stage: Push
  image: docker:latest
  artifacts:
    paths:
      - "dist/"
  only:
    - tags
  script:
    - DOCKER_IMAGE_TAG=$CI_COMMIT_TAG
    - docker build -t $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG .
    - echo "$CI_REGISTRY_TOKEN" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
    - docker push $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG

执行后返回错误:

denied: requested access to the resource is denied
Cleaning up project directory and file based variables
ERROR: Job failed: exit code 1.

排查与解决步骤

1. 统一Registry地址与镜像路径

  • 检查$DOCKER_REGISTRY是否与GitLab预定义变量$CI_REGISTRY一致,登录命令用的是$CI_REGISTRY,推送却用$DOCKER_REGISTRY,两者不匹配会导致权限验证失效。
  • 建议直接使用GitLab预定义变量$CI_PROJECT_PATH替代自定义的$DOCKER_IMAGE_NAME,确保镜像路径和项目完全对应,修改后的脚本示例:
    script:
      - DOCKER_IMAGE_TAG=$CI_COMMIT_TAG
      - docker build -t $CI_REGISTRY/$CI_PROJECT_PATH:$DOCKER_IMAGE_TAG .
      - echo "$CI_REGISTRY_TOKEN" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
      - docker push $CI_REGISTRY/$CI_PROJECT_PATH:$DOCKER_IMAGE_TAG
    

2. 验证CI/CD预定义变量有效性

  • 不要手动覆盖$CI_REGISTRY_USER和$CI_REGISTRY_TOKEN这两个GitLab自动注入的变量,进入项目Settings > CI/CD > Variables,删除自定义的同名变量,避免干扰默认权限凭证。

3. 检查项目Registry权限配置

  • 确认项目的Container Registry已启用:进入Packages & Registries > Container Registry,查看是否正常显示镜像列表。
  • 确保CI作业使用的gitlab-ci-token用户拥有推送权限:在项目Settings > Members中,确认该用户(或对应CI/CD角色)至少拥有Developer权限,Maintainer或Owner权限更稳妥。如果是推送到组级Registry,需同步检查组权限设置。

4. 检查镜像标签合法性

  • 确认$CI_COMMIT_TAG的格式符合Docker标签规范,不能包含空格、特殊字符(如@、/除外路径分隔),非法标签会被Registry拒绝接收。

5. 手动验证权限

  • 在本地环境用项目CI令牌测试登录和推送,排查是否是CI环境外的权限问题:
    # 替换为你的项目Registry地址和CI令牌
    docker login registry.gitlab.com -u gitlab-ci-token -p <你的CI_REGISTRY_TOKEN>
    docker build -t registry.gitlab.com/你的项目路径:test .
    docker push registry.gitlab.com/你的项目路径:test
    
    手动推送失败则是项目权限配置问题,手动成功则需检查CI作业中的变量取值或命令逻辑。

内容的提问来源于stack exchange,提问作者Fabrizio Manna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:45:27