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

使用skopeo向GCR复制镜像时的Google Cloud认证问题

GitLab流水线中Skopeo对接GCR的可行认证方案

以下是几种无需用户名密码、适配服务账号密钥的认证方案:

方案1:借助gcloud CLI生成Docker认证配置

Skopeo会自动读取Docker的config.json认证文件,通过gcloud可以快速生成适配GCR的配置:

  • 流水线中使用包含gcloud SDK的镜像(比如google/cloud-sdk:latest)
  • 激活服务账号:
    gcloud auth activate-service-account --key-file="$GCR_SERVICE_ACCOUNT_KEY_PATH"
    
  • 配置Docker认证(自动写入~/.docker/config.json):
    gcloud auth configure-docker gcr.io
    
  • 直接执行Skopeo拉取/推送命令即可,无需额外凭据参数

方案2:手动构造Docker认证配置文件

如果不想安装gcloud,可直接生成符合格式的config.json:

  • 将服务账号密钥存储为GitLab CI/CD变量(比如GCR_SERVICE_ACCOUNT_KEY,注意设为多行变量)
  • 在流水线中生成认证文件:
    cat > ~/.docker/config.json << EOF
    {
      "auths": {
        "gcr.io": {
          "username": "_json_key",
          "password": "$GCR_SERVICE_ACCOUNT_KEY",
          "auth": "$(echo -n "_json_key:$GCR_SERVICE_ACCOUNT_KEY" | base64)"
        }
      }
    }
    EOF
    
  • 执行Skopeo命令时会自动读取该配置

方案3:直接通过Skopeo的--creds参数传递凭据

Skopeo支持直接传递_json_key作为用户名,服务账号密钥作为密码:

  • 将服务账号密钥存为GitLab CI/CD变量GCR_SERVICE_ACCOUNT_KEY
  • 执行Skopeo命令时添加凭据参数:
    skopeo copy docker://gcr.io/your-project/your-image:tag docker://target-registry/your-image:tag \
      --creds="_json_key:$GCR_SERVICE_ACCOUNT_KEY"
    

注意事项

  • 如果密钥包含换行符,在GitLab变量中需启用保护变量和掩码变量,并确保变量类型为多行
  • 确认服务账号拥有GCR的roles/storage.objectViewer(拉取)和roles/storage.objectCreator(推送)权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:40:32