You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL Ubuntu系统中Django的gunicorn服务无法访问如何解决?

问题解决方案

容器内curl localhost:8000返回302的问题

302属于重定向状态码,不是服务运行错误,通常由以下Django配置导致:

  • 你请求的路径需要身份验证,触发了自动跳转至登录页的逻辑
  • 开启了APPEND_SLASH配置,请求的路径未以斜杠结尾,触发自动补全斜杠的重定向
  • 配置了全局HTTPS强制跳转,HTTP请求被跳转至HTTPS路径

验证方式:执行curl -L localhost:8000跟随重定向请求,即可获取最终页面内容。

Windows侧无法通过localhost:8000访问服务的问题

按优先级依次排查以下配置:

  1. 调整Gunicorn监听地址
    当前日志显示Gunicorn仅监听容器本地回环地址127.0.0.1:8000,外部请求无法接入,修改启动命令为:
    gunicorn -b 0.0.0.0:8000 myapp.wsgi
  2. 确认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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:09:04