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(数据库迁移脚本运行器) 应用服务器

DBapp-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 ECS 集群中正在运行的容器

AWS Elastic Beanstalk 与 EC2 容器服务 (ECS) - Docker

AWS ECS 在一个任务定义中启动多个容器

如何在 ECS(容器存储)上验证 AWS EBS(Beanstalk)? AccessDeniedException

在 ECS 任务中重启单个退出的容器

Spring Cloud 微服务(五) 部署到AWS ECS