Cloud Run部署Flask应用仅根路由可用,其他路由返回404的排查求助
Cloud Run部署Flask应用仅根路由可用,其他路由返回404的排查求助
终于把Flask应用部署到Cloud Run了,但碰到个特别诡异的问题:只有根路由/能正常返回结果,其他所有路由比如/healthz和/print_path全都返回404 Not Found!折腾了好半天还是没找到原因,来求助各位大佬!
目前的状态
- ✅ 正常工作:用
curl访问根路由
能正确返回curl https://sudicgpt-api-1055692892850.europe-west1.run.app/Root OK,证明服务是活的 - ❌ 全部失败:访问其他路由
都返回404 Not Foundcurl https://sudicgpt-api-1055692892850.europe-west1.run.app/healthz curl https://sudicgpt-api-1055692892850.europe-west1.run.app/print_path
环境与配置详情
基础环境
- Python版本:3.11,Docker镜像基于
python:3.11-slim - 部署平台:Google Cloud Run托管式服务,欧洲西部1区
- 项目文件结构:
/SudicGPT/ ├── Dockerfile ├── main.py └── (其他无关的辅助文件)
Dockerfile代码
FROM python:3.11-slim WORKDIR /app COPY . . RUN pip install flask CMD ["python", "main.py"]
main.py代码(简化测试版,真实代码同样有问题)
因为原应用的路由也不行,我写了个极简版测试:
from flask import Flask app = Flask(__name__) @app.route("/") def root(): return "Root OK", 200 @app.route("/healthz") def healthz(): return {"status": "healthy"}, 200 @app.route("/print_path") def print_path(): import os return {"cwd": os.getcwd()}, 200 if __name__ == "__main__": app.run(host="0.0.0.0", port=8080)
已经试过的排查操作
我已经把能想到的常规操作都试了一遍:
- 确认部署的是最新版本的
main.py,没有部署旧文件 - 用
--no-cache参数重新构建Docker镜像,避免缓存问题 - 验证Flask监听的是
0.0.0.0:8080,允许所有IP访问 - 本地运行Docker容器测试:所有路由都能正常返回结果,完全没问题
- 检查Cloud Run的部署日志,确认使用的是最新的镜像哈希
- 部署命令是:
gcloud run deploy sudicgpt-api --image gcr.io/sudicgpt/sudicgpt-api --region europe-west1 --platform managed --allow-unauthenticated --port=8080
重要更新!本地Docker测试100%正常
刚才我在本地拉取部署用的镜像,运行起来测试:
docker run -it --rm -p 8080:8080 gcr.io/sudicgpt/sudicgpt-api
然后访问本地的/healthz、/print_path都能正常返回预期的JSON结果,说明应用本身完全没问题!问题肯定出在Cloud Run的部署或者环境上?
求助问题
既然本地Docker运行一切正常,为什么到了Cloud Run上就只有根路由能用?会不会是Cloud Run的某个配置我漏了?或者容器在Cloud Run运行时有什么隐藏的限制?还是Flask在Cloud Run环境下有什么特殊的坑?
各位大佬有没有遇到过类似的情况,或者有什么我没考虑到的排查方向?感谢大家的帮助!
内容来源于stack exchange
相关产品推荐
相关产品推荐

