AWS ecs - 如果其中一个容器退出或被杀死,所有容器都会被杀死(停止)

asp*_*pak 4 amazon-ec2 amazon-ecs docker docker-compose

环境

  • 亚马逊AWS
  • Docker 版本 17.03.1-ce,内部版本 7392c3b/17.03.1-ce

问题

我们的应用程序中有 3 个 docker 容器。

  • D B
  • DB-seed(数据库迁移脚本运行程序)
  • 应用服务器

DB应用程序服务器启动,但是一旦DB-seed在运行一些迁移脚本后退出(应该如此)。其余的容器死亡(停止)。

这种奇怪的行为只发生在 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
Run Code Online (Sandbox Code Playgroud)

这是 AWS ecs 中的问题还是功能(全部或无)?

Luk*_*son 5

essential在任务定义中缺少参数。不幸的是,我不知道通过 插入此参数的方法docker-compose,但这就是导致您在生成的 ECS 任务中出现行为的原因。从文档:

如果容器的基本参数标记为true,并且该容器因任何原因失败或停止,则属于该任务的所有其他容器都将停止。如果容器的基本参数标记为false,则其失败不会影响任务中的其余容器。如果省略此参数,则假定容器是必不可少的。

请注意,该参数在省略时默认true。由于所有的任务都缺少参数,但预计他们的行为停止时,其中一人退出。

更多信息可以在 ECS 任务定义参数文档中找到:http : //docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definition_environment

我知道这不是一个确切的答案,但我希望它有助于确定如何解决您的问题。