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

首次部署NestJS到AWS AppRunner遇TCP健康检查失败求助

NestJS部署AWS AppRunner健康检查失败排查方案

首次将NestJS应用部署到AWS AppRunner时,TCP/HTTP健康检查均失败,但本地运行容器完全正常?试试从以下几个方向排查:

1. 确认AppRunner端口配置无错误

  • 检查AppRunner服务的端口映射,容器端口和访问端口必须均设置为3003,避免端口填写错误
  • 优先选择HTTP健康检查(NestJS本质是HTTP服务),TCP检查仅验证端口是否开放,无法确认服务是否真正就绪

2. 配置有效的HTTP健康检查端点

NestJS默认根路径/不一定返回200状态码(除非你自定义了接口),会导致AppRunner的HTTP健康检查失败。直接在main.ts中添加一个简单的健康检查接口:

async function bootstrap() {
  console.log('Starting server on port 3003');
  const app = await NestFactory.create(AppModule);
  // 添加健康检查接口
  app.getHttpAdapter().get('/health', (req, res) => {
    res.status(200).send('OK');
  });
  await app.listen(3003, '0.0.0.0');
}
bootstrap();

之后在AppRunner健康检查配置中,将路径改为/health,同时调整检查参数:超时设置为10秒,间隔5秒,重试5次——默认超时时间可能过短,服务尚未启动完成就开始检查。

3. 通过AppRunner应用日志排查启动问题

进入AppRunner控制台查看应用日志,重点确认:

  • 是否执行了node dist/main命令,构建产物路径是否正确
  • 有没有依赖缺失、模块加载失败等报错信息
  • 是否输出了Starting server on port 3003,确认服务确实启动成功

4. 验证容器内部端口监听状态

将ECR中的镜像拉取到本地运行,然后进入容器执行以下命令:

docker exec -it <容器ID> netstat -tulpn

确认node进程是否在监听0.0.0.0:3003(避免仅监听localhost导致外部无法访问)

5. 优化Docker构建流程(解决启动慢导致的超时)

如果是服务启动过慢引发健康检查超时,可使用多阶段构建缩小镜像体积,减少启动时间:

# 构建阶段:生成编译后的代码
FROM node:20 AS builder
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm ci  # 用ci安装依赖更稳定
COPY . .
RUN npm run build

# 运行阶段:仅保留运行所需文件
FROM node:20-slim
WORKDIR /usr/src/app
COPY --from=builder /usr/src/app/dist ./dist
COPY --from=builder /usr/src/app/package*.json ./
RUN npm ci --only=production  # 仅安装生产依赖
EXPOSE 3003
CMD ["node", "dist/main"]

内容的提问来源于stack exchange,提问作者Toni K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:33:12