Google Cloud Run部署时cloudbuild.yaml构建步骤失败求助
首次使用Google Cloud部署带有WebSocket的Node.js程序时,遇到构建错误:
ERROR: build step 0 "gcr.io/cloud-builders/docker" failed: step exited with non-zero status: 1
采用Google Cloud Run官方文档提供的默认cloudbuild.yaml,该文件与Dockerfile一同置于项目根目录,且Dockerfile在本地运行完全正常,参考同类问题未找到适配方案,寻求帮助。
配置文件内容
cloudbuild.yaml
steps: # Docker Build - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'us-central1-docker.pkg.dev/game-gossip-409604/gamegossip-server/gamegossip', '--network=cloudbuild', '.'] # Docker Push - name: 'gcr.io/cloud-builders/docker' args: ['push', 'us-central1-docker.pkg.dev/game-gossip-409604/gamegossip-server/gamegossip', '--network=cloudbuild'] # Entrypoint, timeout and environment variables - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: 'gcloud' timeout: 240s args: ['compute', 'instances', 'create-with-container', 'my-vm-name', '--container-image', 'us-central1-docker.pkg.dev/game-gossip-409604/gamegossip-server/gamegossip'] env: - 'CLOUDSDK_COMPUTE_REGION=us-central1' - 'CLOUDSDK_COMPUTE_ZONE=us-central1-a'
Dockerfile
ARG NODE_VERSION=20.10.0 FROM node:${NODE_VERSION}-alpine ENV NODE_ENV production WORKDIR /usr/src/app RUN --mount=type=bind,source=package.json,target=package.json \ --mount=type=bind,source=package-lock.json,target=package-lock.json \ --mount=type=cache,target=/root/.npm \ npm ci --omit=dev USER node COPY . . EXPOSE 8080 CMD node server.js
查看完整构建日志
当前错误仅提示步骤0失败,无具体细节。登录Google Cloud控制台,进入Cloud Build页面找到对应构建任务,查看完整日志输出,定位Docker构建过程中的具体错误(如依赖安装失败、文件缺失、权限冲突等)。验证Artifact Registry权限
确保Cloud Build服务账号拥有Artifact Registry的写入权限(roles/artifactregistry.writer)。构建步骤需将镜像推送到us-central1-docker.pkg.dev下的私有仓库,权限不足会导致推送失败,甚至影响构建阶段的镜像标记操作。检查文件与路径配置
- 确认项目根目录的
.dockerignore文件是否正确配置,避免排除server.js、package.json等必要文件; - 本地构建正常但Cloud Build失败,可能是本地存在未提交的文件,检查Git仓库是否已将所有必要文件提交到远程。
- 确认项目根目录的
调整Docker构建参数
尝试移除构建命令中的--network=cloudbuild参数,部分场景下该网络配置可能导致npm安装依赖时无法正常联网,进而触发构建失败。排查npm安装权限问题
Dockerfile中RUN npm ci阶段以root用户执行,后续切换到node用户,若COPY . .后文件权限不符合node用户的访问要求,可能导致启动失败。可尝试修改COPY命令添加权限配置:COPY --chown=node:node . .分步调试构建流程
修改cloudbuild.yaml,暂时只保留Docker构建步骤,验证该步骤是否能独立成功;确认构建正常后,再逐步添加推送和VM创建步骤,缩小问题范围。
内容的提问来源于stack exchange,提问作者Joshua Kolby

