如何配置Docker下的NestJS开发环境实现代码修改实时生效?
解决开发环境NestJS代码变更不生效问题
核心原因
你当前的配置是标准生产环境配置,存在两个导致热更新失效的问题:
- 容器内的代码是镜像构建阶段静态拷贝的版本,本地代码修改后不会同步到运行中的容器内
- 启动命令用的是
npm run start:prod,运行的是提前构建好的静态产物,没有监听代码变更的热重载能力
调整步骤
1. 新增开发环境专属Dockerfile
在你的api项目根目录下新建Dockerfile.dev,和原有生产用的Dockerfile区分开,避免影响生产部署配置:
FROM node:14.4.0-alpine # Create app directory WORKDIR /usr/src/app # Copy package files COPY package*.json ./ # Install npm packages RUN npm install # 开发环境代码通过挂载同步,不需要提前拷贝全量代码和构建,直接启动带热重载的开发服务 CMD [ "npm", "run", "start:dev" ]
2. 修改docker-compose.yml的api服务配置
给api服务新增挂载配置,指定用开发版Dockerfile构建:
services: # 其他服务配置保持不变 api: build: context: ../api dockerfile: Dockerfile.dev # 新增:指定使用开发环境Dockerfile hostname: tracking_code_api ports: - '${APP_PORT}:3000' # 新增volumes配置 volumes: - ../api:/usr/src/app # 把本地api目录挂载到容器内工作目录,本地修改实时同步到容器 - /usr/src/app/node_modules # 匿名卷,防止本地node_modules覆盖容器内的版本,避免跨系统二进制兼容问题 environment: # 原有环境变量全部保持不变 depends_on: # 原有依赖全部保持不变
3. 验证配置
确认你api项目的package.json中scripts配置存在start:dev命令,默认NestJS项目的配置如下,无需额外修改:
{ "scripts": { "start:dev": "nest start --watch" } }
生效方式
修改完成后执行一次docker-compose up --build重新构建启动服务,后续修改本地代码就会自动触发容器内的代码热重载,不需要重新构建镜像。
内容的提问来源于stack exchange,提问作者hu7sy
相关产品推荐
相关产品推荐

