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

在AWS Elastic Beanstalk使用Docker平台创建应用时遇部署错误

问题排查与解决方案

一、优先排查VPC网络配置

  • 子网与路由配置:
    • 确保Beanstalk环境使用的公有子网关联互联网网关(IGW),路由表包含指向0.0.0.0/0的IGW路由;若使用私有子网,必须配置NAT网关,且私有子网路由表有指向NAT网关的0.0.0.0/0路由,保证实例能访问AWS服务端点(如Beanstalk、ECS、ECR等)。
    • 确认子网所在可用区有足够的EC2实例配额,避免因配额不足导致实例无法启动。
  • 安全组规则:
    • 实例安全组必须允许出站流量到443端口(HTTPS),确保实例能与Beanstalk控制平面通信;必要时可暂时放开全出站流量排查问题。
    • 安全组入站规则需开放Beanstalk健康检查端口(默认80/443,若Docker容器使用其他端口需对应开放)。
  • VPC端点配置:若使用私有子网且不想部署NAT网关,需创建以下VPC端点:
    • com.amazonaws.<region>.elasticbeanstalk-api
    • com.amazonaws.<region>.elasticbeanstalk-health
    • com.amazonaws.<region>.ecs
    • com.amazonaws.<region>.ecr.api
    • com.amazonaws.<region>.ecr.dkr

二、验证Dockerrun.aws.json配置

  • 确认配置文件使用正确版本:ECS on Amazon Linux 2平台需指定AWSEBDockerrunVersion: 2,容器定义符合ECS规范,示例如下:
    {
      "AWSEBDockerrunVersion": 2,
      "containerDefinitions": [
        {
          "name": "your-app-container",
          "image": "your-ecr-repo-uri:tag",
          "essential": true,
          "portMappings": [
            {
              "hostPort": 80,
              "containerPort": 8080
            }
          ],
          "environment": [
            {
              "name": "DB_HOST",
              "value": "your-postgres-endpoint"
            }
          ]
        }
      ]
    }
    
  • 镜像架构匹配:若使用ARM架构的db.t4g.small实例,需确保ECR中的镜像是ARM架构或多架构镜像,避免因架构不兼容导致容器无法启动。

三、检查IAM权限配置

  • 确认Beanstalk服务角色(aws-elasticbeanstalk-service-role)拥有足够权限,需包含ECS集群创建、任务定义管理、资源访问的相关权限(可临时附加AmazonEC2ContainerServiceFullAccess排查)。
  • 实例配置文件(aws-elasticbeanstalk-ec2-role)需附加AmazonEC2ContainerServiceforEC2Role和AmazonEC2RoleforSSM权限,确保实例能注册到ECS集群、拉取镜像、上报健康状态。

四、日志定位具体故障点

  • 通过CloudWatch日志组/aws/elasticbeanstalk/<your-environment-name>/var/log查看关键日志:
    • /var/log/ecs/ecs-agent.log:检查ECS Agent是否正常注册到集群、能否拉取任务定义。
    • /var/log/elasticbeanstalk/eb-engine.log:查看Beanstalk引擎初始化过程,排查镜像拉取失败、容器启动错误等问题。
  • 若实例已启动但无法通信,可通过AWS Systems Manager Session Manager连接实例,直接查看本地日志文件定位问题。

五、数据库关联检查

  • 确认PostgreSQL数据库的安全组允许Beanstalk实例安全组的入站连接(5432端口)。
  • 验证环境变量中的数据库配置(端点、用户名、密码、端口)是否正确,避免容器因无法连接数据库而启动失败,导致健康状态无上报。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:20:16