如何在Google Artifact Registry中实现跨项目复制制品
Artifact Registry跨项目复制容器镜像的正确实现方式
你之前使用的gcloud artifacts docker tags add命令仅支持为同一个镜像实例添加多个标签,源和目标路径如果分属不同项目/不同仓库,本质是两个独立的镜像存储位置,自然会触发镜像不匹配的报错,该逻辑和旧版Container Registry的标签复制逻辑不通用。
推荐方案:使用内置镜像复制命令
直接用gcloud提供的原生复制命令,不需要将镜像拉取到本地,直接在谷歌云后端完成跨项目/跨区域的镜像复制,命令格式如下:
gcloud artifacts docker images copy \ <源镜像路径> \ <目标镜像路径>
对应你的场景,可直接执行以下命令:
gcloud artifacts docker images copy \ us-east4-docker.pkg.dev/source-proj/my-repo/my-image:latest \ us-east4-docker.pkg.dev/dest-proj/my-repo/my-image:latest
如果需要复制该镜像的所有标签,可将末尾的:latest替换为:*即可。
前置权限要求
执行命令前需要确保当前操作账号同时满足两个权限:
- 源项目对应Artifact Registry仓库的
Artifact Registry Reader角色 - 目标项目对应Artifact Registry仓库的
Artifact Registry Writer角色
备选方案:本地中转复制
如果遇到特殊网络限制无法直接用上述复制命令,也可以通过本地Docker客户端中转完成操作:
- 拉取源镜像到本地
docker pull us-east4-docker.pkg.dev/source-proj/my-repo/my-image:latest
- 给镜像打目标仓库标签
docker tag us-east4-docker.pkg.dev/source-proj/my-repo/my-image:latest us-east4-docker.pkg.dev/dest-proj/my-repo/my-image:latest
- 推送镜像到目标仓库
docker push us-east4-docker.pkg.dev/dest-proj/my-repo/my-image:latest
内容的提问来源于stack exchange,提问作者rossco
相关产品推荐
相关产品推荐

