Laragon Redis 重启后无法启动

前言

环境:Windows10 + Laragon + Redis 8.0.1(cygwin 移植版)

现象:电脑重启前 Redis 6379 正常使用;重启后启动失败,客户端报错:

Could not connect to Redis at 127.0.0.1:6379: Connection refused

MySQL 正常启动,唯独 Redis 异常。

踩坑重点:常规 netstat 查不到端口占用,极易误导大家以为是配置、rdb 文件、权限问题。

一、初步排查过程

1. 检查 6379 端口占用

打开 PowerShell 执行:

netstat -ano | findstr "6379"

无任何输出,初步判定:Redis 进程根本没有成功监听 6379 端口。

2. 手动启动 Redis 查看原始报错

进入 Laragon Redis 目录,PowerShell 需要加 .\ 执行程序:

cd D:\software\laragon\bin\redis\Redis-8.0.1-Windows-x64-cygwin
.\redis-server.exe ../../etc/redis.conf

捕获关键错误日志:

# Warning: Could not create server TCP listening socket 127.0.0.1:6379: bind: Permission denied
# Failed listening on port 6379 (tcp), aborting.

第一反应:权限不足!尝试 管理员身份运行 PowerShell、管理员启动 Laragon,问题依旧。

3. 排除常见误区

  1. ❌ 不是 dump.rdb 持久化文件损坏(删除 rdb 测试无效)
  2. ❌ 不是防火墙拦截(本地 127.0.0.1 不受防火墙限制)
  3. ❌ 不是杀毒软件拦截(关闭安全软件测试无效)
  4. ❌ 不是 Redis 配置文件错误(重启前配置完全一致)

二、定位根本原因:Windows WinNAT 系统预留端口(幽灵端口占用)

Windows 开启 Hyper-V / WSL2 / Docker 后,系统服务 WinNAT 开机时 随机预留一段 TCP 端口,分配给虚拟化网络使用。

被纳入预留区间的端口:

  • netstat 看不到任何占用进程
  • 管理员权限也无法绑定监听
  • 报错:bind: Permission denied
  • 每次重启电脑,预留端口区间会重新刷新(随机性:有时候 6379 不在区间就能正常跑)

验证命令(管理员 PowerShell 执行)

netsh int ipv4 show excludedportrange protocol=tcp

输出结果:

Start Port    End Port
----------    --------
      6286        6385

✅ 6379 正好落在 6286 ~ 6385 系统预留端口区间!

这就是典型 Windows「幽灵端口占用」,不是程序占用,是操作系统内核锁定端口。

三、三套可行解决方案(推荐优先级排序)

方案 1:修改 Redis 端口【⭐ 首选,稳定无副作用】

避开系统预留端口段,不需要修改系统网络配置,不会影响 WSL/Docker。

当前预留区间:6286 ~ 6385,不能选用 6380~6385!

选择 6386。

  1. 打开 Laragon Redis 配置文件

    D:\software\laragon\etc\redis.conf
    
    # port 6379
    port 6386
    
  2. Laragon Stop All,重启 Redis

  3. 验证端口监听

    netstat -ano | findstr "6386"
    
  4. 连接测试

    # cli连接
    redis-cli -p 6386
    # PHP代码示例
    $redis->connect('127.0.0.1', 6386);
    

后续项目所有 Redis 连接配置同步修改端口。

方案 2:临时释放 WinNAT(缺点:重启大概率复现)

管理员 PowerShell 执行:

net stop winnat
net start winnat

执行完成立刻启动 Redis。

⚠️ 不推荐长期使用,开机随机重新分配端口区间。

方案 3:永久把 6379 加入可用白名单(谨慎使用)

风险:如果你日常使用 Docker/WSL,可能造成容器端口转发冲突。

管理员 PowerShell:

net stop winnat
# 将6379排除在系统预留范围
netsh int ipv4 add excludedportrange protocol=tcp startport=6379 numberofports=1 store=persistent
net start winnat

四、通用排查总结(收藏备用)

当 Windows 出现:

bind: Permission denied,netstat 找不到占用进程,重启随机复现

按下面顺序排查:

  1. 管理员执行 netsh int ipv4 show excludedportrange protocol=tcp
  2. 判断目标端口是否在系统预留区间
  3. 在区间内:优先更换端口(最简单)
  4. 不在区间:排查杀毒软件、Winsock 网络栈、程序本身权限

五、避坑小贴士

  1. Laragon cygwin 版 Redis 对 Windows 端口权限更加敏感,遇到端口问题优先换端口;
  2. 开启 WSL2/Docker 的 Windows 开发机,尽量不要强依赖 6379、3306 这类固定端口;
  3. PowerShell 执行当前目录程序必须添加 .\,否则提示命令找不到;
  4. 不要仅凭 netstat 判断端口状态,幽灵占用场景下该命令会失效。
posted @ 2026-07-29 14:54  solarlemon  阅读(39)  评论(0)    收藏  举报