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

NestJS项目Docker容器启动后以code 0退出问题求助

解决NestJS容器启动后立即以Code 0退出的问题

针对你遇到的NestJS容器正常退出(Code 0)但PostgreSQL容器运行正常的情况,以下是常见排查方向和解决方案:

1. 检查Dockerfile中的启动命令

Code 0通常意味着容器内的启动命令执行完成后就退出了,而非持续运行服务。常见错误场景:

  • 误将构建命令(如npm run build)作为容器启动命令,构建完成后进程自然结束
  • 启动命令未指向持续运行的生产服务脚本

修正示例:
确保Dockerfile的CMD或ENTRYPOINT指向NestJS的生产启动命令:

# 构建阶段
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 生产阶段
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
# 启动持续运行的服务
CMD ["node", "dist/main.js"]
# 或使用npm脚本(需确保package.json中配置了start:prod命令)
# CMD ["npm", "run", "start:prod"]

2. 验证docker-compose.yml中的服务配置

  • 确保NestJS服务的command未覆盖正确的启动命令
  • 可添加tty: true或stdin_open: true用于调试前台进程运行状态
  • 配置PostgreSQL健康检查,避免NestJS在数据库未就绪时启动:
services:
  nestjs-app:
    build: .
    command: npm run start:prod
    ports:
      - "3000:3000"
    depends_on:
      postgres:
        condition: service_healthy
  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: your-user
      POSTGRES_PASSWORD: your-pass
      POSTGRES_DB: your-db
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U your-user -d your-db"]
      interval: 5s
      timeout: 5s
      retries: 5

3. 查看容器启动日志细节

即使容器已退出,仍可通过以下命令查看完整运行日志,定位具体原因:

docker logs <nestjs-container-name-or-id>

如果日志仅显示构建完成信息,说明启动命令是一次性任务;如果日志有依赖缺失提示,需检查生产依赖是否正确安装。

4. 确认NestJS应用的启动逻辑

  • 检查main.ts中是否有app.listen()调用,确保服务监听端口并持续运行
  • 在本地环境验证应用是否能正常启动,排除代码本身存在的主动退出逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:59:58