我的 Amazon Elastic Container Service (Amazon ECS) 任务卡滞在 PROVISIONING(预置)状态。
解决方案
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
要解决此问题,请查看受影响服务的 Amazon ECS 服务事件,以检查最近的部署活动和故障。使用事件模式和错误消息来确定问题是否与容量、网络或配置问题有关。有关任务启动失败的更多详细信息,请查看已停止的任务错误消息中是否有 TaskFailedToStart 错误。
检查您的容量提供商配置
要检查容量提供商的 Amazon EC2 Auto Scaling 组在任务预置期间是否达到其最大容量,请运行以下 describe-auto-scaling-groups AWS CLI 命令:
aws autoscaling describe-auto-scaling-groups \
--auto-scaling-group-names your-asg-name \
--query 'AutoScalingGroups[].{DesiredCapacity:DesiredCapacity,MaxSize:MaxSize,RunningInstances:Instances[?LifecycleState==InService].InstanceId|length}'
**注意:**将 your-asg-name 替换为您的 EC2 Auto Scaling 组名称。
要查看所有容器实例及其状态,请运行以下 list-container-instances 命令:
aws ecs list-container-instances \
--cluster your-cluster-name \
--status ACTIVE \
--query 'containerInstanceArns[]'
要增加 Auto Scaling 组的容量,请运行以下 update-auto-scaling-group 命令:
aws autoscaling update-auto-scaling-group \
--auto-scaling-group-name your-asg-name \
--max-size new-max-size
**注意:**将 your-asg-name 替换为您的 EC2 Auto Scaling 组名称,并将 new-max-size 替换为更新后的 EC2 Auto Scaling 组大小。
此外,请确保 Amazon ECS 代理在容器实例上运行且运行正常。
要进一步解决容量提供商错误,请参阅如何解决在尝试为 Amazon ECS 集群设置新的容量提供商或更新现有容量提供商时出现的问题?
检查您的服务配置和任务扩缩
确保该服务的所需数量与容器实例上的 CPU 和内存中的可用基础设施容量相匹配。要查看服务的所需数量和运行次数,请运行以下 describe-services 命令:
aws ecs describe-services \
--cluster your-cluster-name \
--services your-service-name \
--query 'services[].{desiredCount:desiredCount,runningCount:runningCount,pendingCount:pendingCount}'
**注意:**将 your-cluster-name 替换为您的集群名称,将 your-service-name 替换为您的服务名称。
要更新服务的所需数量,请运行以下 update-service 命令:
aws ecs update-service \
--cluster your-cluster-name \
--service your-service-name \
--desired-count new-count
--force-new-deployment
注意:将 your-cluster-name 替换为您的集群名称,将 your-service-name 替换为您的服务名称,将 new-count 替换为所需的任务数。--force-new-deployment 选项强制更新服务。
查看您的服务配额
如果您超过了 Amazon ECS 服务配额,则可能会遇到任务问题。要解决服务配额问题,请参阅如何解决 Amazon ECS 服务配额问题?
检查您的网络配置
检查您的任务安全组规则,并确保子网有可用的 IP 地址。对于没有 NAT 网关的私有子网,请为您的配置设置所需的 VPC 端点。VPC 端点安全组必须允许来自您的任务子网 CIDR 的入站流量。
您的安全组还必须允许以下流量:
- 用于拉取容器映像的互联网或 NAT 网关的出站 HTTPS(端口 443)流量。
- 您使用的 VPC 端点的出站流量。
- 来自应用程序负载均衡器安全组的入站流量,用于使用应用程序负载均衡器的配置。
- 需要通信的容器之间的入站流量。
要检查 Amazon ECS 服务子网是否具有所需的 IP 地址,请运行以下 describe-subnets 命令:
aws ec2 describe-subnets \
--subnet-ids subnet-abcde \
--query 'Subnets[].{SubnetId:SubnetId,AvailableIPs:AvailableIpAddressCount,TotalIPs:CidrBlock}'
**注意:**将 subnet-abcde 替换为您的子网 ID。
确保遵守任务的网络模式要求:
- 对于 awsvpc 模式,请确保每项任务都有专用的弹性网络接口。
**注意:**每种实例类型的网络接口都有最大配额。确保您的容器实例具有可用于新任务的网络接口连接点。
- 对于桥接模式,请确保 docker0 网桥的池中有足够的 IP 地址。
- 对于主机模式,没有特定的网络资源约束。但是,当多个任务使用同一个主机端口时,可能会发生端口冲突。
相关信息
Amazon ECS 故障排除
Amazon ECS 服务配额
自动扩缩 Amazon ECS 服务
为 Amazon ECS 设计您的解决方案