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

AWS App Runner部署Node.js应用失败:健康检查不通过

解决AWS App Runner部署Node.js容器健康检查失败问题

核心问题分析

本地运行镜像必须使用--network='host'才能访问,说明你的Node.js服务仅绑定了容器内的127.0.0.1地址,而非0.0.0.0。这种情况下,容器外部(包括App Runner的健康检查组件)无法通过容器网络访问服务,直接导致健康检查失败。

分步解决方案

1. 修改Node.js应用的监听地址

打开你的index.js,确保服务监听的是0.0.0.0(允许容器网络内的所有请求),而非仅容器内部可访问的127.0.0.1:

// 修正后的代码
app.listen(8080, '0.0.0.0', () => {
  console.log('Server running on port 8080');
});

2. 修正Dockerfile配置

确保Dockerfile包含端口暴露声明,且启动命令正确:

FROM node:18-alpine
WORKDIR /app

COPY package*.json ./
RUN npm install --only=production

COPY . .
EXPOSE 8080

CMD ["node", "index.js"]

3. 本地验证容器网络连通性

重新构建镜像并测试,无需使用--network='host':

# 重新构建镜像
docker build -t node-api .

# 映射端口运行容器
docker run -p 8080:8080 node-api

此时访问localhost:8080应能正常获取健康检查的200响应,说明容器网络已能正确访问服务。

4. 重新推送镜像并部署到App Runner

  • 删除ECR中的旧镜像(或构建新的版本标签),推送修正后的镜像到ECR
  • 在App Runner中重新部署,确认健康检查配置:
    • 协议:HTTP
    • 路径:/(你的健康检查端点)
    • 端口:8080
    • 可将初始延迟设为10秒,给服务足够的启动时间

补充:App Runner配置文件(appRunner.json)示例

确保配置文件中正确指定端口和健康检查规则:

{
  "SourceConfiguration": {
    "ImageRepository": {
      "ImageIdentifier": "你的ECR镜像URI",
      "ImageConfiguration": {
        "Port": "8080",
        "HealthCheckConfiguration": {
          "Protocol": "HTTP",
          "Path": "/",
          "Interval": 10,
          "Timeout": 5,
          "HealthyThreshold": 2,
          "UnhealthyThreshold": 3
        }
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:10:20