AWS ecs - 如果其中一个容器退出或被杀死,所有容器都会被杀死(停止)
Posted
技术标签:
【中文标题】AWS ecs - 如果其中一个容器退出或被杀死,所有容器都会被杀死(停止)【英文标题】:AWS ecs - All containers gets killed(STOPPED) if one of them exits or killed 【发布时间】:2018-01-24 18:57:31 【问题描述】:环境
AWS ecs Docker 版本 17.03.1-ce,构建 7392c3b/17.03.1-ce问题
我们的应用中有 3 个 docker 容器。
数据库 DB-seed(数据库迁移脚本运行器) 应用服务器DB 和 app-server 已启动,但是一旦 DB-种子 在运行一些迁移脚本后退出(应该如此)。其余容器死亡(停止)。
这种奇怪的行为只发生在 AWS ecs 中,从不在我的本地 docker 设置中发生。
此外,杀死任何容器,停止 AWS-ECS 中的其他容器。
我们的 docker compose 文件
version: '2'
services:
db:
image: db-image
hostname: db
cpu_shares: 50
mem_limit: 3758096384
volumes:
- /data/db:/data/db
ports:
- "27017:27017"
db-seed:
image:db-seed
cpu_shares: 10
mem_limit: 504288000
links:
- db
web:
image: server-image
cpu_shares: 50
mem_limit: 3758096384
ports:
- "8080:8080"
links:
- db
这是 AWS ecs 中的问题还是功能(全部或全部)?
【问题讨论】:
【参考方案1】:您的任务定义中缺少essential
参数。不幸的是,我不知道通过docker-compose
插入此参数的方法,但这就是导致您在生成的ECS 任务中的行为的原因。来自文档:
如果容器的基本参数标记为
true
,并且该容器因任何原因失败或停止,则属于该任务的所有其他容器都将停止。如果容器的基本参数被标记为false
,那么它的失败不会影响任务中的其余容器。如果省略此参数,则假定容器是必需的。
注意参数默认 为true
时省略。鉴于您的所有任务都缺少该参数,它们的预期行为all会在其中一个退出时停止。
更多信息可以在 ECS 任务定义参数文档中找到:http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definition_environment
我知道这不是一个确切的答案,但我希望它有助于确定如何解决您的问题。
【讨论】:
以上是关于AWS ecs - 如果其中一个容器退出或被杀死,所有容器都会被杀死(停止)的主要内容,如果未能解决你的问题,请参考以下文章
AWS Elastic Beanstalk 与 EC2 容器服务 (ECS) - Docker