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
相关产品推荐
相关产品推荐

