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

升级Windows版Docker Desktop后NestJS --watch模式失效求助

问题排查与解决方案

核心原因推测

Docker Desktop 4.15.0在Windows平台的文件系统监听机制存在变更,导致容器内nest start --watch无法捕获宿主机的文件改动,常见触发点包括:

  • WSL2后端的挂载目录文件通知传递逻辑调整,宿主机变更无法同步到容器内的inotify监听
  • 文件共享设置因升级被重置,容器无法实时获取文件变更
  • Nest CLI依赖的chokidar库,在Docker环境变更后无法正常触发监听

具体解决方案

1. 调整WSL2挂载配置(WSL2后端用户适用)

  • 在WSL2终端编辑/etc/wsl.conf(无则新建),添加如下配置:
    [automount]
    options = "metadata,umask=0022,fmask=0022,notify"
    
  • 执行wsl --shutdown关闭WSL实例,重启Docker Desktop和WSL2
  • 可在容器内安装inotify-tools,运行inotifywait -m /app/src验证:修改宿主机文件,查看是否有监听输出

2. 重置Docker文件共享设置

  • 打开Docker Desktop设置,进入Resources > File Sharing,确认项目目录在共享列表内,重新勾选后点击"Apply & Restart"
  • 若使用WSL2后端,确保已开启Use the WSL 2 based engine,且WSL发行版关联正常

3. 强制Nest CLI使用轮询模式

  • 编辑项目根目录的nest-cli.json,添加watchOptions配置:
    {
      "compilerOptions": {
        "watchOptions": {
          "watchDirectory": "polling",
          "watchFile": "polling"
        }
      }
    }
    
  • 重启nest start --watch,轮询模式可绕过inotify依赖,解决文件监听失效问题(仅效率略低)

4. 检查容器挂载方式

  • 确保使用**绑定挂载(bind mount)**而非卷挂载,卷挂载的文件同步存在延迟。示例命令:
    docker run -v $(pwd):/app -p 3000:3000 my-nest-app npm run start:watch
    

5. 回退Docker Desktop版本

若以上方法均无效,可暂时回退至之前正常工作的版本(如4.14.x),等待官方修复该兼容性问题


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:20:32