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

Azure App Service部署FastAPI遇503服务不可用故障求助

问题分析与解决方案

核心问题

从日志可直接定位:Azure App Service 配置的容器端口与应用监听端口不匹配,导致健康检查失败,容器被强制终止,最终返回503错误。


1. 无法提供服务的原因

Azure App Service启动容器时,会自动注入PORT=8000环境变量,并在该端口执行HTTP健康检查。但你的启动命令gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b :80 app:app硬编码绑定了80端口,应用实际运行在80端口,Azure的健康检查请求无法在8000端口得到响应,超时后直接终止容器,因此外部访问返回503。

2. 端口匹配问题确认

是的,存在明确的端口不匹配:

  • 日志中docker run命令显示:-e PORT=8000和--expose=8000,Azure期望应用监听8000端口
  • 你的启动命令绑定的是:80,应用实际监听80端口
    两者端口不一致,健康检查必然失败。

3. 额外排查方法

  • 查看容器内部日志:在Azure App Service的「日志流」中切换到「容器日志」,查看gunicorn/uvicorn的启动日志,确认应用是否正常启动、监听端口是否正确
  • SSH连接容器:通过App Service的「开发工具→SSH」进入容器,执行netstat -tulpn查看端口占用,确认应用是否在预期端口监听;也可手动执行启动命令,排查是否有报错
  • 检查环境变量:在容器内执行echo $PORT,确认Azure注入的PORT环境变量值
  • 测试启动命令:在容器内直接运行启动命令,观察服务是否能正常启动,并用curl localhost:$PORT测试接口是否可访问

解决方案

修改启动命令,放弃硬编码端口,改用Azure提供的PORT环境变量:

gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:$PORT app:app

或简化为:

gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b :$PORT app:app

修改后重新部署应用,此时应用会监听Azure指定的PORT端口,健康检查可正常响应,容器即可成功启动并对外提供服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:22:04