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

WSL上Docker异常:wslrelay进程引发的奇怪问题

问题背景与解决方案

问题描述

将Next.js应用部署在映射到3000端口的Docker容器中,停电后应用无法正常运行,但Git记录无任何变更。出现的报错毫无逻辑:

  • 提示模块未找到,但该模块已安装
  • 注释相关代码后又出现ORM关联未定义的错误(该关联已添加多日)
  • 看起来像是运行着旧版本应用,但修改文件后页面会热重载且变更能正常体现

尝试过的排查操作均无效:

  • 多次重启电脑
  • 将仓库克隆到新目录重新构建容器
  • 重置Docker Desktop
  • 卸载重装Docker

最终意外发现:即使停止所有Docker服务、删除容器、镜像和卷,禁用缓存后浏览器中localhost:3000仍会重载。

通过PowerShell命令查找占用3000端口的进程:

Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess

结果显示是wslrelay进程。杀死该进程后重新启动容器:

taskkill /F /PID <进程ID>
docker compose up

应用恢复正常。

原因分析

这是WSL Relay进程异常残留导致的端口占用冲突:

  • 停电属于异常关机,WSL(Windows Subsystem for Linux)的relay进程没有正常退出,会持续占用3000端口——哪怕你停止Docker服务、删除容器镜像,这个残留进程依然在监听该端口。
  • Windows上的Docker Desktop默认依赖WSL 2后端运行,当你启动容器映射3000端口时,实际是通过WSL网络栈转发端口,但残留的wslrelay进程已经占据了该端口,导致容器无法正常绑定端口,浏览器访问的其实是残留进程提供的旧应用内容,因此出现各种逻辑混乱的报错。
  • 而修改文件后页面能热重载,是因为本地开发的热重载服务通过其他端口或机制生效,但对外暴露的3000端口仍被残留进程占用,导致你看到的是混合新旧内容的异常状态。

内容的提问来源于stack exchange,提问作者tvanc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:02:36