无法使用Artifact Registry自定义镜像创建Google Cloud VM
问题描述
- 可通过Google Cloud CLI创建VM,但无法使用Artifact Registry中的自定义镜像完成操作
- 使用Node.js版Google Cloud SDK时,仅能借助公开模板创建VM,无法使用自定义镜像
- 运行Cloud控制台生成的CLI命令失败,报错:
ERROR: (gcloud.compute.instances.create-with-container) argument --network-interface: valid keys are [address, aliases,...
CLI命令问题分析
报错核心原因是--network-interface参数中包含了不合法的键。network-tier和stack-type属于全局独立参数,不能嵌套在--network-interface的键值对里。
原命令中:
--network-interface=network-tier=PREMIUM,stack-type=IPV4_ONLY,subnet=default
这一行不符合参数格式要求,需要拆分为三个独立参数:
--network-interface=subnet=default \ --network-tier=PREMIUM \ --stack-type=IPV4_ONLY
修正后的完整CLI命令
gcloud compute instances create-with-container instance-1 \ --project=<project name> \ --zone=<zone> \ --machine-type=e2-micro \ --network-interface=subnet=default \ --network-tier=PREMIUM \ --stack-type=IPV4_ONLY \ --maintenance-policy=MIGRATE \ --provisioning-model=STANDARD \ --service-account=<service account> \ --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append \ --image=projects/cos-cloud/global/images/cos-stable-105-17412-101-13 \ --boot-disk-size=10GB \ --boot-disk-type=pd-balanced \ --boot-disk-device-name=instance-1 \ --container-image=<完整Artifact Registry镜像地址> \ --container-restart-policy=always \ --no-shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring \ --labels=goog-ec-src=vm_add-gcloud,container-vm=cos-stable-105-17412-101-13
使用Artifact Registry自定义镜像创建VM的提示
- 权限配置:确保创建VM的身份(用户或服务账号)拥有
roles/artifactregistry.reader角色,该角色允许读取Artifact Registry中的镜像资源。 - 镜像地址规范:必须使用完整的Artifact Registry镜像地址,格式为
{区域}-docker.pkg.dev/{项目ID}/{仓库名}/{镜像名}:{标签},例如us-central1-docker.pkg.dev/my-project/my-repo/my-app:v1。 - 预验证镜像可用性:在执行VM创建命令前,先在Cloud Shell中运行
docker pull <镜像地址>,确认镜像可以正常拉取,排除镜像不存在、权限不足或区域不匹配的问题。 - Node.js SDK配置:调用
compute.instances.insert接口时,在请求体的containerImage字段传入完整的镜像地址;同时确保VM使用的服务账号具备Artifact Registry读取权限,且操作系统选择支持容器运行的版本(如Container-Optimized OS)。 - 更新CLI版本:执行
gcloud components update升级到最新版gcloud CLI,旧版本可能存在参数兼容或镜像源支持的问题。
内容的提问来源于stack exchange,提问作者Sim
相关产品推荐
相关产品推荐

