You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在GCP K8s中的FastAPI应用出现502错误及重启问题排查

问题排查与配置修正建议

结合你提供的配置文件和问题描述,以下是导致应用反复重启、存活探针持续调用的核心配置错误及优化方案:

一、Dockerfile 关键错误

1. 工作目录语法错误

你的WORKDIR命令存在语法问题,无法正确设置容器内工作路径:

# 错误写法
WORKDIR .app work directory for code

修正为合法路径定义:

WORKDIR /app

路径错误会导致后续代码复制、模块导入混乱,直接引发应用启动失败。

2. COPY 命令路径错误与冗余

  • COPY . app:应改为COPY . /app,确保本地代码复制到容器的/app目录(配合正确WORKDIR);
  • COPY poetry.lock pyproject.toml:缺少目标路径,修正为COPY poetry.lock pyproject.toml ./;
  • 删除重复的COPY pyproject.toml pyproject.toml冗余命令。

3. 虚拟环境未全局生效

你创建了虚拟环境,但仅在单个RUN命令中临时激活,后续CMD不会使用该环境(每个RUN是独立Shell进程)。需将虚拟环境路径加入系统全局PATH:

ENV PATH="/opt/venv/bin:/root/.poetry/bin:$PATH"

否则CMD中的uvicorn会调用系统级Python,导致依赖缺失、应用启动不稳定。

4. PYTHONPATH 路径不匹配

ENV PYTHONPATH="${PYTHONPATH}:/appstuff"中的路径与代码实际存放路径不符,修正为:

ENV PYTHONPATH="${PYTHONPATH}:/app"

路径错误会导致应用无法导入模块,引发启动异常。

二、Deployment 配置优化

1. 存活探针配置不完整

当前仅设置initialDelaySeconds,缺少调用周期、失败阈值等关键参数,且未配置就绪探针。补充完整配置:

livenessProbe:
  httpGet:
    path: /alive
    port: 80
  initialDelaySeconds: 120
  periodSeconds: 30
  failureThreshold: 3
  successThreshold: 1
readinessProbe:
  httpGet:
    path: /alive
    port: 80
  initialDelaySeconds: 60
  periodSeconds: 10

就绪探针可确保应用真正就绪后再接收流量,避免未就绪状态下的异常。

2. 启动命令冗余

Deployment中command和args重复了Dockerfile的CMD内容,建议保持配置一致性:要么在Dockerfile中定义完整启动命令,要么在Deployment中覆盖,避免维护混乱。

三、额外排查方向

  • 检查ConfigMap的envConfig是否包含应用必需的环境变量(如数据库连接信息),缺失关键变量会导致应用启动后崩溃或卡住;
  • 通过kubectl logs <pod-name> --previous查看容器上一次退出的日志,获取具体崩溃原因。

内容的提问来源于stack exchange,提问作者GustaMan9000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 03:15:41