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

GitLab Runner无法从Google Artifact Registry拉取镜像求助

解决GitLab Runner无法拉取GCP Artifact Registry镜像的问题

问题背景

在GCP容器优化OS的VM上通过Docker部署GitLab Runner,VM本地Docker可正常拉取Artifact Registry镜像,但Runner的Docker执行器拉取时抛出权限错误:

ERROR: Job failed: failed to pull image "europe-west1-docker.pkg.dev//staging//:" with specified policies [always]: Error response from daemon: Head "https://europe-west1-docker.pkg.dev/v2//staging///manifests/": denied: Permission "artifactregistry.repositories.downloadArtifacts" denied on resource "projects//locations/europe-west1/repositories/staging" (or it may not exist)

解决方案

1. 修正镜像地址格式

报错中的镜像地址存在多余斜杠且缺少项目ID、镜像名和标签,这会导致地址解析失败。正确格式应为:

europe-west1-docker.pkg.dev/<你的GCP项目ID>/staging/<镜像名称>:<标签>

示例:

europe-west1-docker.pkg.dev/my-gcp-project/staging/my-node-app:latest

2. 为VM的Docker Daemon配置凭证

你在个人用户下执行的docker-credential-gcr configure-docker仅配置了当前用户的Docker凭证,但VM的Docker Daemon以root用户运行,会读取/root/.docker/config.json的配置。执行以下命令为root用户配置Artifact Registry凭证:

sudo docker-credential-gcr configure-docker --registries europe-west1-docker.pkg.dev

验证root用户能否正常拉取镜像:

sudo docker pull europe-west1-docker.pkg.dev/<你的GCP项目ID>/staging/<镜像名称>:<标签>

3. 调整GitLab Runner容器的挂载配置

修改Runner启动命令,确保挂载root用户的Docker配置文件到容器内的对应路径,让Runner能使用正确的凭证:

docker run -d --name gitlab-runner --restart always --log-driver none \
  -v /home/<user_name>/srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /root/.docker/config.json:/root/.docker/config.json:ro \
  gitlab/gitlab-runner:latest

若需直接使用VM的服务账号凭证(更可靠),可额外挂载服务账号目录:

docker run -d --name gitlab-runner --restart always --log-driver none \
  -v /home/<user_name>/srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /root/.docker/config.json:/root/.docker/config.json:ro \
  -v /run/secrets/google.com/service-account/default:/run/secrets/google.com/service-account/default:ro \
  gitlab/gitlab-runner:latest

4. 重启GitLab Runner容器

修改配置后,重启Runner使变更生效:

docker restart gitlab-runner

5. 验证Runner权限

在GitLab CI任务中添加测试步骤,确认镜像拉取正常:

test-pull-image:
  stage: test
  script:
    - docker pull europe-west1-docker.pkg.dev/<你的GCP项目ID>/staging/<镜像名称>:<标签>
    - docker image ls | grep staging

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:36:02