AWS ecs – 如果其中一个退出或死亡,则所有容器都将被终止(STOPPED)

信封

  • AWS ecs
  • Docker版本17.03.1-ce,build 7392c3b / 17.03.1-ce

问题

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

  • D B
  • DB种子(DB迁移脚本运行器)
  • 应用服务器

数据库应用程序服务器开始,但是一旦DB-seed在运行一些迁移脚本之后退出(它应该)。 其余的容器死掉(STOP)。

这种奇怪的行为只发生在AWS ecs中,从来没有在我的本地docker设置。

而且,杀死任何一个容器,停止AWS-ECS中的其他容器。

我们的docker合成文件

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或function(全部或无)的问题?

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

如果容器的基本参数被标记为true ,并且该容器因任何原因失败或停止,那么作为该任务一部分的所有其他容器都将被停止。 如果容器的基本参数被标记为false ,则其失败不会影响任务中其余的容器。 如果省略此参数,则认为容器是必需的。

请注意,该参数在省略时默认true 。 鉴于你所有的任务都缺less参数,当他们中的一个退出时,所有的任务都会停止。

有关更多信息,请参阅ECS任务定义参数文档: http : //docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definition_environment

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