尝试使用 AWS CLI 运行 ECS 任务时出现资源:内存错误
Posted
技术标签:
【中文标题】尝试使用 AWS CLI 运行 ECS 任务时出现资源:内存错误【英文标题】:resource:memory error when trying to run an ECS task using AWS CLI 【发布时间】:2018-08-27 19:09:20 【问题描述】:我正在尝试使用 AWS ECS 和 docker 设置 CI。我使用 Codeship 作为 CI 工具,但这并不重要。
我在 shell 脚本中执行以下步骤:
使用我的 Dockerfile 构建映像, 将镜像推送到 ECS 存储库, 将 task-definition.json 推送到 ECSaws ecs register-task-definition --family postgraphile --cli-input-json file:///deploy/ecs-task-def.json --region us-east-2
运行ECS任务aws ecs run-task --task-definition postgraphile --cluster testcluster --region us-east-2
Shell 脚本运行成功,但是在我尝试运行我的 ECS 任务后看到输出错误:
"tasks": [],
"failures": [
"arn": "arn:aws:ecs:us-east-2:99999999999:container-instance/050ab165-7669-45d5-8be7-d990cf4fff42",
"reason": "RESOURCE:MEMORY"
]
我的ecs-task-def.json
:
"containerDefinitions": [
"name": "postgraphile-container",
"image": "999999999999.dkr.ecr.us-east-2.amazonaws.com/test-repository",
"memory": 500,
"essential": true,
"portMappings": [
"hostPort": 5000,
"containerPort": 5000
]
],
"volumes": [],
"memory": "900",
"cpu": "128",
"placementConstraints": [],
"family": "postgraphile",
"taskRoleArn": ""
我想我已经检查了所有内存限制.. 我错过了什么吗?
更新: 在 ec2 实例重新启动几次后,我终于可以毫无错误地运行 ecs 任务。多次运行任务后,错误返回
【问题讨论】:
在我的例子中,发生这种情况是因为我的 EC2 实例的内存比我在容器中指定的要少。我能够在我的服务的“事件”选项卡中找到详细信息(ECS > 集群 > 服务 > 事件)。 您是否知道如何告诉“aws ecs run-task”在集群上运行具有足够内存来运行任务的实例? 是的,任务定义一切正常。我的问题是:当已经有一个正在运行的任务时,我试图运行该任务。所以我只想重新启动一个正在运行的任务,实际上我必须停止正在运行的任务并使用相同的任务定义再次运行它 在我的例子中,我想要 8 Go 所以我写了内存:8000000,但是内存是兆字节,所以我需要 8000(确切地说是 7800)。 @cklab 谢谢你的朋友。我将 EC2 实例类型更新为一个更小的实例类型,但我的弹性 beanstalk 应用程序停止工作。所以原因正是您所说的:“我的 EC2 实例的内存比我在容器中指定的要少”...谢谢! 【参考方案1】:我在使用 docker 将服务部署到 EC2 时遇到了类似的错误。我使用的是腻子而不是 CLI。我运行命令docker images
来获取每个图像的大小。我发现总大小超过了我的 EC2 实例存储。我将 EC2 实例卷增加到 20GB(EC2-->Volume-->Modify 卷)。问题已解决。后来我经过多次试验和错误再次遇到问题。这一次,我发现我有很多未使用的图像,这些图像是在多个 docker compose 命令之后积累起来的。我删除了所有容器、卷和图像,内存错误已解决。
【讨论】:
【参考方案2】:在 ECS 集群上部署服务时出现此错误。完全删除服务然后重新部署它帮助我解决了这个问题。
【讨论】:
以上是关于尝试使用 AWS CLI 运行 ECS 任务时出现资源:内存错误的主要内容,如果未能解决你的问题,请参考以下文章