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

如何实现文件变更时自动重建Docker镜像并重启容器?

文件变更自动重建Docker镜像并重启容器的实现方案

方法1:用你熟悉的nodemon监听触发

这是最贴合你现有习惯的方式:

  • 先确保nodemon已安装,没装的话执行npm install -D nodemon或yarn add -D nodemon
  • 修改package.json的scripts,新增一个watch脚本:
"scripts": {
  "dev": "docker build . -t app1 && docker run -p 3000:8080 app1",
  "watch": "nodemon --watch . --ext js,json,ts,html,css --exec 'yarn dev'"
}

其中--watch .监听当前目录所有文件,--ext指定要监控的文件类型,你可以根据项目需求调整;--exec就是文件变动时要执行的命令。

  • 启动监听:执行yarn watch,之后只要指定类型的文件发生变更,nodemon就会自动执行yarn dev,帮你重建镜像、重启容器。

注意:这种方式每次变更都会全量构建镜像,大项目可能速度偏慢,建议优化Dockerfile的构建缓存——比如先拷贝package.json安装依赖,再拷贝其他代码,依赖未变化时就能复用缓存,加快构建速度。

方法2:用onchange工具监听

不想用nodemon的话,试试onchange工具:

  • 安装依赖:yarn add -D onchange
  • 修改scripts:
"scripts": {
  "dev": "docker build . -t app1 && docker run -p 3000:8080 app1",
  "watch": "onchange '**/*.{js,json,ts,html,css}' -- yarn dev"
}
  • 执行yarn watch即可生效。

方法3:Linux/macOS用原生shell工具

不想装npm包的话,用系统自带的inotifywait:

  • 先安装inotify-tools:Ubuntu/Debian执行sudo apt install inotify-tools,macOS用brew install inotify-tools
  • 编写shell脚本(比如命名为watch.sh):
#!/bin/bash
while true; do
  inotifywait -r -e modify,create,delete . --exclude 'node_modules|.git'
  yarn dev
done
  • 给脚本添加执行权限:chmod +x watch.sh
  • 运行脚本:./watch.sh

更高效的优化方案

每次重建镜像效率其实很低,更推荐挂载本地目录到容器,文件变更直接同步到容器内,再结合容器内的nodemon重启服务:

  1. 修改dev脚本,挂载本地目录:
"scripts": {
  "dev": "docker run -p 3000:8080 -v $(pwd):/app app1"
}
  1. 调整Dockerfile,确保容器内安装了nodemon,启动命令改用nodemon:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN yarn install
COPY . .
CMD ["nodemon", "server.js"] # 替换成你的实际启动文件
  1. 这样本地文件修改后,挂载的目录会自动同步到容器,容器内的nodemon会直接重启服务,完全不用重建镜像,速度快很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:36:00