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

AWS ECS Fargate部署React镜像遇ELB健康检查失败求助

问题排查与解决方案

核心问题在于容器内Nginx实际监听80端口,但你的ECS全链路配置都指向3000端口,导致流量无法到达容器,触发ELB健康检查失败。

本地运行正常的原因

你本地用docker run -p 3000:80,是把主机的3000端口映射到容器的80端口(Nginx默认监听端口),所以能正常访问。但ECS配置里错误地将容器端口指定为3000,和容器内实际运行的服务端口不匹配。

具体修复方案

方案一:调整ECS配置适配容器默认端口(最快解决)

  1. 修改ECS任务定义:
    将PortMappings中的ContainerPort改为80:
    PortMappings:
      - ContainerPort: 80
        Protocol: tcp
    
  2. 修改目标组配置:
    将TargetGroup的Port和HealthCheckPort都改为80。
  3. Listener配置可保留3000(外部用户通过ALB的3000端口访问,转发到容器80端口),也可根据需求改为80。

方案二:修改Docker镜像让Nginx监听3000端口(适合需固定容器端口的场景)

  1. 在项目根目录创建nginx.conf文件,内容如下:
    server {
        listen 3000;
        root /usr/share/nginx/html;
        index index.html index.htm;
    
        location / {
            try_files $uri $uri/ /index.html;
        }
    }
    
  2. 修改Dockerfile的Nginx阶段,添加配置文件复制命令:
    FROM node:alpine as build
    WORKDIR /app
    COPY package*.json .
    RUN npm install
    COPY . .
    RUN npm run build
    
    FROM nginx:1.19
    WORKDIR /usr/share/nginx/html
    RUN rm -rf ./*
    # 复制自定义Nginx配置,替换默认配置
    COPY nginx.conf /etc/nginx/conf.d/default.conf
    EXPOSE 3000
    COPY --from=build /app/build .
    
  3. 重新构建并推送镜像到ECR,保持现有ECS配置不变即可正常运行。

额外检查项

  • 确认Fargate任务的安全组允许来自ALB安全组的流量(你的当前安全组开放了0.0.0.0/0,此问题可忽略,但生产环境建议限制来源为ALB安全组)。
  • 确认TargetGroup的HealthCheckPath为/(React静态站点默认index.html存在,无需修改)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:11:21