不同Docker容器分别部署uWSGI与Nginx出现Connection refused问题
问题根因
你的502错误核心是Nginx配置的上游转发地址填写错误,和权限无关。
错误点说明
0.0.0.0是服务端监听用的特殊地址,代表监听当前设备所有网卡的请求,不能作为客户端请求的目标地址使用。
你已经将两个容器加入了同一个自定义Docker网络app_network,Docker内置DNS服务会自动将容器名称解析为对应容器的内网IP,因此你需要用uWSGI容器的名称作为转发目标的主机名。
修复步骤
- 修改Nginx站点配置,将配置块中的
uwsgi_pass 0.0.0.0:8080;替换为:
uwsgi_pass flaskapp:8080;
- 重新构建Nginx镜像,或者将配置文件通过挂载的方式传入Nginx容器,重启Nginx容器即可恢复正常访问。
可选排查验证步骤
如果修改后还是报错,可按以下步骤定位问题:
- 进入Nginx容器执行
ping flaskapp,如果能正常ping通说明两个容器网络连通、DNS解析正常 - 进入uWSGI容器执行
ss -tunlp,查看8080端口是否确实被uwsgi进程监听 - 确认uWSGI使用的是原生uwsgi协议:你当前配置用
socket = 0.0.0.0:8080是符合要求的,和Nginx的uwsgi_pass指令匹配,不需要修改为http协议
内容的提问来源于stack exchange,提问作者Archirk
相关产品推荐
相关产品推荐

