使用Docker-compose实现Node.js项目热重载需做哪些配置修改
Node.js + Docker Compose 热重载配置修改方案
你当前的配置存在3个核心问题:多阶段构建逻辑错误、挂载卷覆盖了容器内部依赖、nodemon未适配容器文件监听场景,按以下步骤修改即可:
1. 修改Dockerfile配置
原配置中dev阶段未继承base阶段的依赖安装结果,属于无效多阶段构建,修改后内容如下:
FROM node:14 as base WORKDIR /home/node/app COPY package*.json ./ # 全局+项目依赖只需要在base阶段安装一次 RUN npm install -g nodemon && npm install EXPOSE 4000 CMD [ "npm", "start" ] # dev阶段直接继承base,不需要重复初始化 FROM base as dev # 开启文件变更轮询环境变量,适配容器监听场景 ENV CHOKIDAR_USEPOLLING=true CMD ["npm", "run", "watch"]
2. 修改docker-compose.yml配置
- 将构建目标切换为
dev阶段 - 新增匿名卷避免挂载时覆盖容器内部的
node_modules目录 - 移除冗余的
command配置(dev阶段的CMD已指定启动命令,也可以保留覆盖)
修改后内容如下:
version: '3.7' services: ts-node-docker: build: context: . dockerfile: Dockerfile target: dev # 切换为dev构建目标 volumes: - ./:/home/node/app/ - /home/node/app/node_modules # 匿名卷,保留容器内的node_modules container_name: ts-node-docker ports: - '4000:4000'
3. 可选:完善package.json的watch脚本
给nodemon加上legacy监听参数,进一步提升容器环境的变更识别率,修改scripts字段:
{ // 其余配置保持不变 "scripts": { "start": "node server.js", "watch": "nodemon -L server.js" // 新增-L参数,指定监听入口 } }
验证方式
执行docker-compose up --build启动服务后,修改本地的server.js代码,控制台会自动打印nodemon重启日志,访问4000端口即可看到更新后的内容。
内容的提问来源于stack exchange,提问作者Shivam Kumar Singh
相关产品推荐
相关产品推荐

