Docker-Compose部署的NPM容器持续重启问题求助
容器持续重启的问题分析与解决
核心原因
容器反复重启的根本问题是主进程直接退出:
你还未创建index.js入口文件,执行npm run dev时会触发node index.js,这个命令会因为找不到文件直接报错退出。而docker-compose.yml中配置了restart: unless-stopped,Docker会在容器主进程退出后自动重启容器,导致循环重启。
另外你的Dockerfile存在路径配置错误:
- WORKDIR设置为
/src,但COPY package*.json /把依赖文件复制到了根目录,而非/src,会导致npm install在根目录安装依赖,和后续挂载的卷路径不匹配。
分步解决方案
1. 创建基础入口脚本,维持主进程运行
创建index.js文件,让Node进程保持运行(纯CLI脚本需要避免进程直接退出):
// index.js console.log("CLI脚本已启动"); // 通过定时器维持进程运行,可根据实际需求替换为业务逻辑 setInterval(() => { console.log("脚本运行中..."); }, 5000);
2. 修正Dockerfile路径问题
调整依赖文件的复制路径,确保和WORKDIR一致,同时优化构建缓存:
FROM node:18-alpine WORKDIR /src # 复制package文件到当前工作目录(/src) COPY package*.json ./ RUN npm install -g nodemon && npm install # 复制项目文件到当前工作目录 COPY . ./ # 纯CLI脚本无需暴露端口,可删除EXPOSE 3000
3. 优化配置(可选)
- 如果需要开发时自动重载脚本,修改
package.json的dev脚本,使用nodemon:
{ "scripts": { "dev": "nodemon index.js" } }
- 纯CLI脚本不需要端口映射,可删除
docker-compose.yml中的ports配置:
version: '3.8' services: calculations-script: restart: unless-stopped build: context: . dockerfile: DockerFile command: npm run dev volumes: - ./:/src
验证方法
执行docker-compose up --build启动容器,然后用docker logs -f <容器名>查看日志,应该能看到脚本运行的输出,容器不会再反复重启。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

