GCP Cloud Run未正确加载指定修订版本求助排查
问题排查与解决步骤
针对你遇到的Cloud Run部署后仍出现旧版本错误的问题,尽管UI显示镜像SHA正确,可按以下步骤排查:
1. 直接使用镜像Digest强制部署
标签存在被覆盖或缓存歧义的可能,直接用唯一的镜像Digest部署,确保Cloud Run拉取绝对正确的镜像内容:
gcloud run deploy $(API_NAME) --image gcr.io/image2paint/image2paint-api@sha256:cead5c33f468[完整Digest] --port 8000 --memory $(API_MEMORY) --cpu $(API_CPU) --max-instances $(API_MAX_SCALE) --timeout 5m
2. 检查修订版启动日志
进入Cloud Run控制台,找到对应服务的目标修订版详情,查看启动阶段的日志(而非请求日志):
- 确认容器启动时的代码目录结构,检查
serving模块是否存在 - 查看Poetry依赖安装日志,确认是否加载了正确的依赖版本,是否有旧警告残留
3. 验证远程镜像内容与本地一致性
将GCR上的镜像拉到本地,检查内容是否与你本地运行的0.2.0版本一致:
# 拉取远程镜像 docker pull gcr.io/image2paint/image2paint-api:0.2.0 # 进入容器交互式检查 docker run --rm -it gcr.io/image2paint/image2paint-api:0.2.0 bash
在容器内执行以下命令验证:
# 检查serving模块是否存在 python -c "import serving; print(serving.__file__)" # 检查Poetry依赖状态 poetry show
4. 触发全新部署绕过潜在缓存
Cloud Run可能存在容器层缓存,可通过修改一个无关配置触发全新部署,比如临时调整内存参数:
# 临时修改内存部署 gcloud run deploy $(API_NAME) --image $(DOCKER_IMAGE) --port 8000 --memory 512Mi --cpu $(API_CPU) --max-instances $(API_MAX_SCALE) --timeout 5m # 改回原内存配置 gcloud run deploy $(API_NAME) --image $(DOCKER_IMAGE) --port 8000 --memory $(API_MEMORY) --cpu $(API_CPU) --max-instances $(API_MAX_SCALE) --timeout 5m
5. 检查Dockerfile构建逻辑
确认Dockerfile是否存在可能导致旧代码残留的缓存问题:
- 确保先复制
poetry.lock和pyproject.toml,再复制项目代码,避免依赖层缓存覆盖代码更新 - 检查
PYTHONPATH环境变量设置,确保项目根目录在Python的模块搜索路径中(例如ENV PYTHONPATH=/app)
6. 确认流量全部分配到最新修订版
进入Cloud Run服务的「修订版」页面,检查流量分配比例,确保100%流量指向标记为“已选中”的最新修订版,无旧修订版分流。
内容的提问来源于stack exchange,提问作者guillemrbaiges
相关产品推荐
相关产品推荐

