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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:36:44