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

WSL2 Ubuntu20.04+Docker环境Laravel启动后浏览器无法访问localhost问题

问题原因分析
  • WSL2 端口转发异常:WSL2 与 Windows 宿主机的 localhost 端口转发机制偶尔会在系统重启、WSL 后台重置后失效,导致宿主机无法通过 localhost 访问 WSL 内运行的服务
  • 服务绑定地址限制:此前启动服务时指定 --host=127.0.0.1,该地址仅允许 WSL 内部本地访问,此前的正常访问依赖 WSL 自动转发机制,转发失效后就会无法从 Windows 侧访问
  • 旧进程挂死占用端口:后台运行的 artisan serve 进程可能出现僵死状态,虽然进程仍在但已经无法响应请求,同时占用目标端口导致新启动的服务实际没有正常绑定端口
  • Docker 端口映射冲突:如果 Laravel 服务运行在 Docker 容器内,可能出现容器端口映射失效、端口被其他宿主机服务占用的情况
解决方案
  1. 清理残留进程
    先在 WSL Ubuntu 终端执行以下命令清理所有僵死的 PHP 进程,确认端口无占用:
pkill php
lsof -i :8080 # 确认无输出即为端口未被占用
  1. 调整服务绑定地址
    重新启动服务时绑定 0.0.0.0,允许所有网段的请求访问:
php artisan serve --host=0.0.0.0 --port=8080

先不要加后台运行的 &,前台运行观察是否有请求日志输出,如果使用 Laravel Sail 作为 Docker 运行环境,直接执行 sail up 即可自动处理端口映射,无需手动运行 artisan serve。
此时可以尝试两种访问方式:

  • 直接使用 WSL 内网 IP 访问:在 WSL 终端执行 ip addr show eth0,获取 inet 字段后的 IP 地址(格式通常为 172.x.x.x),在浏览器访问 http://<WSL_IP>:8080
  • 检查 Docker 配置:确认 docker-compose.yml 中的端口映射配置,容器内 8000/8080 端口已正确映射到宿主机端口
  1. 修复 WSL localhost 转发
    如果通过 WSL IP 可以正常访问,说明是 localhost 转发失效,可通过以下方式解决:
  • 临时修复:在 Windows Powershell 执行 wsl --shutdown 关闭 WSL,等待 10 秒后重新启动 WSL 即可恢复转发
  • 永久方案:可在 WSL 内配置启动脚本自动将服务端口转发到宿主机,或直接使用 WSL IP 访问即可
  1. 补充验证
    如果以上操作都无效,可以先在 WSL 内使用 curl 测试服务是否正常响应:
curl http://127.0.0.1:8080

如果有返回页面内容,说明服务本身正常,问题出在宿主机和 WSL 的网络连通上,可检查 Windows 防火墙是否阻止了 WSL 网段的访问请求。

相关截图

运行状态截图
报错截图

内容的提问来源于stack exchange,提问作者Jay.Smyth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:09:05