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

Docker Compose部署Node应用报错:app hook exited with status 137

解决Docker Compose部署Node.js应用时的"app hook exited with status 137"错误

错误根源

  • post_start 不是Docker Compose的合法配置字段,Compose无法识别该启动钩子,导致进程启动失败并返回状态码137(该状态码此处为无效指令触发的进程强制终止)。
  • 当前配置未正确设置容器的启动命令,无法启动Node.js应用。

修正方案

1. 修正Docker Compose配置

移除无效的post_start字段,改用command指定启动命令,修正后的docker-compose.yml如下:

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: nodejs
    container_name: nodejs
    restart: always
    working_dir: /app
    volumes:
      - ./app:/app
    ports:
      - "3000:3000"
    command: "node app.js"  # 替换原post_start字段

2. 优化Dockerfile(推荐)

将依赖安装和启动命令纳入镜像构建流程,避免本地与容器环境的依赖不一致问题,同时简化Compose配置:

FROM node:latest
WORKDIR /app

# 先复制package文件,利用Docker缓存优化构建速度
COPY app/package*.json ./
RUN npm install

# 复制应用代码
COPY app/ .

EXPOSE 3000
# 设置默认启动命令
CMD ["node", "app.js"]

对应的Compose配置可简化为(无需再指定command):

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: nodejs
    container_name: nodejs
    restart: always
    ports:
      - "3000:3000"
    # 若需实时挂载代码修改,保留volume但排除node_modules避免覆盖镜像内依赖
    volumes:
      - ./app:/app
      - /app/node_modules

验证修复

执行以下命令启动服务:

docker compose up

若日志显示 Example app listening on port 3000,则启动成功。可通过访问 http://localhost:3000/test 验证应用响应,预期返回:

{"success": true}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:02:09