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

问题描述 投票:0回答:2

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

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

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

docker dockerfile amazon-ecs
2个回答
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,因此当一个容器停机时,所有部件也将停机。


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"
        }
      ]
    },

非常有用。

© www.soinside.com 2019 - 2024. All rights reserved.