部署特定容器后,重新启动ECS中的容器

时间:2020-04-25 08:38:08

标签: docker dockerfile amazon-ecs

我有一个使用ECS运行多个GO服务的项目。例如,我有3个容器,A,B,C,然后容器D保存其他容器的配置和填充物。是否有一种方法可以在更新或重新启动容器D时重新启动ECS中的其他容器,以便它们可以使用容器D中的新数据?

我当时想拥有一个pub / sub类型的东西,并告诉其他容器一个新版本已经发布,但是我想必须有一种不涉及任何额外代码的简便方法。

如果可能的话,我也想对本地docker-compose堆栈执行此操作。

2 个答案:

答案 0 :(得分:0)

在ECS中,如果它们之间存在依赖关系(可以在任务定义中包含所有容器),则可以在同一任务中定义所有容器A,B,C和D。 如果一个容器在任务中下降,则所有任务容器都将停止(而是启动一个新任务)。部署处于任务级别-因此,部署新任务将替换其中的所有容器。

如果要获得更大的灵活性(可以分别部署A,B,C),则可以创建3个不同的任务,每个任务都有两个容器-A / B / C和D(作为辅助工具)之一:

  • Task_A-同时运行容器A和D。
  • Task_B-同时运行容器B和D。
  • Task_C-同时运行容器C和D。

docker-compose中,您可以运行docker-compose up --abort-on-container-exit,因此当一个容器发生故障时,所有组件也会崩溃。

答案 1 :(得分:0)

经过一番搜索,我发现您可以在任务定义JSON中添加容器依赖项。

https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDependency.html

这允许您为运行中的不同容器添加依赖项。

例如:

  "containerDefinitions": [
    {
      "name": "app",
      "image": "application_image",
      "portMappings": [
        {
          "containerPort": 9080,
          "hostPort": 9080,
          "protocol": "tcp"
        }
      ],
      "essential": true,
      "dependsOn": [
        {
          "containerName": "container-a",
          "condition": "HEALTHY"
        }
      ]
    },

非常有用。