使用Pulumi将本地helloworld Docker镜像部署到GKE集群的问题
问题解决步骤
1. 修复repositoryUrl类型报错
gcp.container.getRegistryRepository()属于异步查询接口,返回结果是Promise类型,无法直接读取属性,你可以用Pulumi内置的pulumi.output包装返回值,直接拼接镜像地址,写法更简洁:
// 用pulumi.output包装异步查询结果 const registry = pulumi.output(gcp.container.getRegistryRepository()); const customImage = "mydockerimg"; const appImage = new docker.Image(customImage, { // 直接拼接仓库地址和镜像信息 imageName: pulumi.interpolate`${registry.repositoryUrl}/${customImage}:v1.0.0`, build: { context: `./${customImage}`, }, });
修改后就不会再出现类型错误。
2. 修复Docker镜像推送GCR失败问题
你手动执行docker push返回的桶相关报错,是GCP镜像仓库权限/配置问题,按以下步骤排查即可:
- 先执行本地Docker的GCR认证命令:
gcloud auth configure-docker,该命令会自动将GCR的认证信息写入本地Docker配置,没有这一步无法直接推送镜像到GCR。 - 确认你当前使用的GCP账号(如果Pulumi用服务账号部署则对应服务账号),已经被授予
roles/storage.admin权限:旧版GCR的镜像底层存储在Cloud Storage桶中,必须有桶的写入权限才能推送镜像。 - 检查GCP控制台Cloud Storage页面,确认
artifacts.<你的GCP项目ID>.appspot.com桶存在且没有异常权限配置,如果桶被误删可以重新创建,或者直接改用新版Artifact Registry作为镜像仓库。 - 确认镜像名称完全符合GCR命名规则,必须包含你的GCP项目ID:
gcr.io/<GCP项目ID>/<镜像名>:<标签>,项目ID拼写错误也会触发推送失败。
内容的提问来源于stack exchange,提问作者gaut
相关产品推荐
相关产品推荐

