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
相关产品推荐
相关产品推荐

