WSL Ubuntu系统中Django的gunicorn服务无法访问如何解决?
问题解决方案
容器内curl localhost:8000返回302的问题
302属于重定向状态码,不是服务运行错误,通常由以下Django配置导致:
- 你请求的路径需要身份验证,触发了自动跳转至登录页的逻辑
- 开启了
APPEND_SLASH配置,请求的路径未以斜杠结尾,触发自动补全斜杠的重定向 - 配置了全局HTTPS强制跳转,HTTP请求被跳转至HTTPS路径
验证方式:执行curl -L localhost:8000跟随重定向请求,即可获取最终页面内容。
Windows侧无法通过localhost:8000访问服务的问题
按优先级依次排查以下配置:
- 调整Gunicorn监听地址
当前日志显示Gunicorn仅监听容器本地回环地址127.0.0.1:8000,外部请求无法接入,修改启动命令为:gunicorn -b 0.0.0.0:8000 myapp.wsgi - 确认Docker端口映射配置
检查docker-compose.yml中对应服务的ports配置,确保已将容器端口映射至WSL宿主机,且未绑定仅本地回环地址:
services: 你的django服务名: # 其他配置省略 ports: - "8000:8000" # 不要写成"127.0.0.1:8000:8000",否则仅WSL本地可访问
修改后重新执行docker-compose up -d生效。
3. WSL2 localhost转发异常处理
WSL2的虚拟网卡默认不会自动将Windows侧的localhost请求转发至WSL环境,可先在WSL终端执行ip addr show eth0获取WSL的虚拟网卡IP(格式通常为172.xx.xx.xx),在Windows侧直接通过http://[WSL的IP]:8000访问即可。
如果需要用localhost访问,可手动配置Windows端口转发规则,或切换至WSL1(WSL1的localhost默认互通)。
4. 防火墙规则排查
确认WSL内的ufw防火墙未拦截8000端口,同时Windows Defender防火墙未拦截该端口的跨网卡请求。
后续对接Web服务器说明
你后续对接Nginx/Apache的逻辑和原生Ubuntu环境完全一致,无需额外适配:可以选择将Gunicorn绑定到Unix套接字文件做反向代理,也可以直接通过端口代理,性能和兼容性都符合生产要求。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

