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

Win10+WSL2环境下Docker化NestJS API热重载失效问题

问题:WSL2 Docker环境下NestJS热重载不生效

环境:Windows 10 + WSL2 + Docker,代码克隆在Windows文件管理器中,DEV模式运行时本地文件修改无法同步触发容器热重载;Ubuntu虚拟机中运行相同代码热重载功能正常。

Dockerfile配置

FROM node:14-alpine

WORKDIR /src

ADD package.json /src 

RUN npm i --silent

ADD . /src 

RUN npm run build 

CMD npm start

docker-compose.yml配置

version: '3'
services:
    app:
        build: .
        command: npm run start:dev
        ports:
            - 4000:4000
        volumes:
            - .:/src/
            - /src/node_modules

volumes:
    nodemodules: {}

项目依赖

"dependencies": {
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-express": "^9.0.0",
    "reflect-metadata": "^0.1.13",
    "rimraf": "^3.0.2",
    "rxjs": "^7.2.0"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "28.1.8",
    "@types/node": "^16.0.0",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "28.1.3",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "28.0.8",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.1.0",
    "typescript": "^4.7.4"
  },

补充信息:克隆并运行特定NestJS热重载示例仓库时功能正常,仅当前项目存在此问题;推测容器无法感知Windows存储区域的文件变化。


解决方案

1. 核心原因

Windows文件系统通过WSL2挂载到容器时,Node.js热重载依赖的inotify文件监听机制无法正常工作,导致容器无法捕捉文件修改事件;而WSL2内部的Linux文件系统则能正常触发该机制。

2. 修复步骤

步骤1:将代码迁移到WSL2内部文件系统

打开WSL2终端,在Linux目录(如~/projects)下克隆代码:

git clone <你的仓库地址>

后续所有操作(构建镜像、启动容器)均在WSL2终端中执行,避免通过Windows文件管理器修改代码。

步骤2:调整热重载启动参数

在package.json的start:dev命令中添加轮询模式参数(兼容跨文件系统场景,若已用WSL内部目录可跳过,但添加后适配性更强):

"scripts": {
  "start:dev": "nest start --watch --watchPollInterval 1000"
}

步骤3:简化Dockerfile(可选)

开发模式下无需提前执行构建,删除RUN npm run build步骤以减少镜像构建时间:

FROM node:14-alpine

WORKDIR /src

ADD package.json /src 

RUN npm i --silent

ADD . /src 

CMD npm start

步骤4:重启容器

在WSL2终端中执行:

docker-compose down
docker-compose up --build

3. 验证要点

  • 修改代码后观察容器日志,确认是否触发热重载
  • 若仍有问题,执行wsl --update升级WSL2到最新版本
  • 确认docker-compose.yml中/src/node_modules卷配置正确,避免覆盖本地依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:50:31