Elastic Beanstalk部署Docker/Flask应用出现502 Gateway Error排查求助
问题排查方向
- 确认Flask服务监听地址:禁止绑定固定内网IP或127.0.0.1,必须绑定
0.0.0.0才能让容器外的进程访问到服务。如果是直接用Flask自带服务器,启动代码需调整为app.run(host='0.0.0.0', port=5000);如果用Gunicorn等WSGI服务器,启动参数需添加--bind 0.0.0.0:5000。 - 核对端口映射配置:
单容器Docker环境需在Dockerrun.aws.json中明确配置端口映射,参考示例:
多容器Docker环境需在{ "AWSEBDockerrunVersion": "1", "Ports": [ { "ContainerPort": 5000, "HostPort": 80 } ] }docker-compose.yml中明确映射端口为"80:5000",禁止仅写容器端口(会导致随机映射宿主端口,反向代理无法找到后端)。 - 验证实例本地连通性:SSH登录到Elastic Beanstalk对应的EC2实例,先执行
docker ps确认容器处于运行状态,再执行curl http://localhost:<映射的宿主端口>验证服务是否能正常响应。如果该请求失败,说明是容器内部服务问题;如果请求成功,说明是上层Nginx反向代理配置异常。 - 检查Nginx错误日志:除容器日志外,查看
/var/log/nginx/error.log,日志会明确标注反向代理转发失败的具体原因(连接超时/连接被拒绝、目标地址端口等),可快速定位配置问题。 - 核对安全组规则:确认Elastic Beanstalk实例的安全组允许负载均衡的入站流量访问对应宿主端口,负载均衡安全组开放80/443端口的公网入站规则。
常见踩坑点
- 打包zip部署包时,需保证
Dockerrun.aws.json/docker-compose.yml/.ebextensions等配置文件在zip包的根目录,不要嵌套在子文件夹中,Elastic Beanstalk仅会读取根目录下的部署配置。 - 不要使用Flask自带的开发服务器部署生产环境,建议切换为Gunicorn等生产级WSGI服务器,避免因开发服务器的限制导致访问异常。
内容的提问来源于stack exchange,提问作者rogebrd
相关产品推荐
相关产品推荐

