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
相关产品推荐
相关产品推荐

