Docker环境下Nodemon文件同步但未自动重启问题求助
Docker中Nodemon无法自动重启服务的解决方案
问题描述
我是Docker新手,通过bind mount实现了文件变更同步,但nodemon并未自动重启服务,必须停止容器后重新执行docker compose up才能看到变更效果。本地未使用Docker时运行一切正常,相关配置文件如下:
Dockerfile
FROM node:18-alpine3.17 WORKDIR /app COPY package*.json /app RUN npm ci COPY . /app EXPOSE 3000 # CMD [ "npm", "run", "dev" ]
docker-compose.yml
version: "3.9" services: frontend: build: context: . dockerfile: Dockerfile command: npm run dev container_name: study-001-frontend-reactjs networks: - study-001 ports: - 3000:3000 volumes: - .:/app - /app/node_modules networks: study-001:
package.json
{ "name": "001-study", "version": "1.0.0", "description": "", "main": "index.js", "type": "module", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "nodemon index.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "express": "^4.18.2" }, "devDependencies": { "nodemon": "^2.0.20" } }
可能的解决方法
1. 切换nodemon的文件监听模式
Alpine基础镜像缺少inotify相关依赖,nodemon默认的inotify监听方式无法正常工作。修改package.json中的dev脚本,使用轮询模式:
"dev": "nodemon --legacy-watch index.js"
2. 确保容器内安装了nodemon
npm ci默认只安装dependencies,不会安装devDependencies。修改Dockerfile中的安装命令,包含开发依赖:
RUN npm ci --include=dev
或者进入容器手动安装:
docker exec -it study-001-frontend-reactjs npm install nodemon --save-dev
3. 解决文件权限问题
容器内的用户可能没有权限读取挂载目录的文件变更,导致nodemon检测不到。在docker-compose.yml中添加用户配置,使用当前主机用户的UID和GID:
services: frontend: # 保留原有配置 user: "${UID}:${GID}"
执行以下命令获取并导出当前用户的UID/GID:
export UID=$(id -u) export GID=$(id -g)
或者在项目根目录创建.env文件,写入:
UID=你的UID GID=你的GID
(可通过id -u和id -g命令查看自身UID/GID)
4. 明确nodemon的监听规则
在项目根目录创建nodemon.json配置文件,指定监听的目录和文件类型:
{ "watch": ["./"], "ext": "js,json" }
内容的提问来源于stack exchange,提问作者Mr.Singh
相关产品推荐
相关产品推荐

