WSL2环境启动Spring Boot应用调用接口返回404问题求助
问题常见成因
- WSL2采用独立虚拟网卡架构,默认的localhost端口转发机制偶发失效,无法将Windows侧的localhost请求自动转发到WSL2内部服务
- Spring Boot服务在WSL2中启动时仅绑定了127.0.0.1回环地址,仅允许WSL2内部访问,拒绝外部(包括Windows宿主)的请求
- WSL2内置的ufw防火墙未放开对应服务端口的访问权限
排查步骤
- 验证WSL2内部服务可用性
在WSL2终端执行命令:curl http://localhost:8080/task
- 若正常返回Hello字符串,说明Spring Boot服务启动正常,问题出在Windows到WSL2的网络链路
- 若同样返回404,首先检查Spring Boot启动日志是否扫描到TaskController类,确认是否配置了
server.servlet.context-path上下文前缀,其次执行lsof -i:8080查看8080端口是否被其他进程占用。
- 检查服务绑定地址
查看Spring Boot启动日志,确认服务绑定地址:
- 若日志显示绑定地址为
127.0.0.1:8080,说明仅允许本地访问 - 若绑定地址为
0.0.0.0:8080,则服务对外开放访问
- 验证WSL2直接IP访问
在WSL2终端执行命令获取内网IP:ip addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'
在Windows侧Postman请求http://[获取到的WSL2 IP]:8080/task,如果能正常返回,可确定是localhost转发失效问题
对应解决方案
- 服务绑定地址问题:在Spring Boot的application配置文件中添加配置
server.address=0.0.0.0,重启服务即可 - localhost转发失效问题:
- 临时方案:每次启动服务后直接使用WSL2的eth0内网IP访问
- 永久方案:在Windows终端执行
wsl --update升级到最新版WSL2,微软已在新版本修复了localhost转发的常见问题,升级后重启WSL即可
- 防火墙拦截问题:在WSL2终端执行
sudo ufw allow 8080放开对应端口的访问权限
内容的提问来源于stack exchange,提问作者user5228754
相关产品推荐
相关产品推荐

