使用Docker、Nginx和Django还原端口至8000时遇连接拒绝错误
问题分析与解决
你的连接拒绝错误来自两处配置问题,直接修改即可解决:
1. 修正Django服务的监听地址
在docker-compose.yml的web服务中,runserver命令绑定了127.0.0.1,这会导致Django仅监听容器内部的回环地址,Nginx容器无法访问。需改为监听容器的所有网卡:
修改后web服务的command字段:
command: python manage.py runserver 0.0.0.0:8000
2. 修正Nginx的反向代理目标
在nginx.conf中,你已定义upstream backend指向web:8000,但实际proxy_pass用的是http://127.0.0.1:8000——这是Nginx容器自身的回环地址,而非Django服务地址。可采用以下两种方案:
方案一:使用已定义的upstream
修改location /中的proxy_pass:
location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
方案二:直接指向web服务
若无需upstream配置,也可直接写服务名:
location / { proxy_pass http://web:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
验证修改
修改完成后重启容器:
docker-compose down && docker-compose up --build
此时访问http://127.0.0.1即可正常转发到Django的8000端口。
内容的提问来源于stack exchange,提问作者amirh_far
相关产品推荐
相关产品推荐

