使用Docker部署Web应用出现504:Gateway Timeout问题求助
解决Azure Docker容器Web应用504 Gateway Timeout及预热请求等待问题
核对端口配置一致性
- 确认Dockerfile中
EXPOSE的端口(例如EXPOSE 8000),与Azure App Service「配置」→「常规设置」里的「端口」值完全匹配。 - 应用代码必须监听
0.0.0.0而非127.0.0.1:- Flask示例:
app.run(host='0.0.0.0', port=8000) - Django示例:
python manage.py runserver 0.0.0.0:8000
只监听本地回环地址会导致Azure网关无法访问容器内的应用。
- Flask示例:
- 确认Dockerfile中
调整健康检查与超时设置
- 在Azure App Service「配置」→「健康检查」中,设置有效的健康检查路径(如
/health),并确保应用能返回200状态码。若没有健康端点,可快速添加:# Flask示例健康端点 @app.route('/health') def health_check(): return 'OK', 200 - 若应用启动需要加载资源(如模型、初始化数据),调高「配置」→「常规设置」里的「启动预热时间」,建议从默认180秒调整至300秒或更长,给足应用启动时间。
- 在Azure App Service「配置」→「健康检查」中,设置有效的健康检查路径(如
排查启动与应用日志
- 查看Azure Portal「日志流」中的容器启动日志,检查是否有依赖安装失败、端口占用、配置文件错误等启动异常。
- 导出应用自身日志,确认应用是否卡在初始化步骤,未完成启动。
本地验证容器可用性
- 本地构建并运行Docker镜像:
docker run -p 8000:8000 your-image-name - 访问
http://localhost:8000及健康端点,确认应用能正常响应,排除镜像本身的问题。
- 本地构建并运行Docker镜像:
检查网络访问限制
- 若应用依赖内部数据库或服务,确认App Service的VNet集成配置正确,防火墙规则允许容器访问这些资源,避免因连接外部服务失败导致启动停滞。
内容的提问来源于stack exchange,提问作者Siddhartha Sharma
相关产品推荐
相关产品推荐

