我有一个使用ECS运行多个GO服务的项目。例如,我有3个容器,A,B,C,然后容器D保存其他容器的配置和填充物。是否有一种方法可以在更新或重新启动容器D时重新启动ECS中的其他容器,以便它们可以使用容器D中的新数据?
我当时想拥有一个pub / sub类型的东西,并告诉其他容器一个新版本已经发布,但是我想必须有一种不涉及任何额外代码的简便方法。
如果可能的话,我也想对本地docker-compose堆栈执行此操作。
答案 0 :(得分:0)
在ECS中,如果它们之间存在依赖关系(可以在任务定义中包含所有容器),则可以在同一任务中定义所有容器A,B,C和D。 如果一个容器在任务中下降,则所有任务容器都将停止(而是启动一个新任务)。部署处于任务级别-因此,部署新任务将替换其中的所有容器。
如果要获得更大的灵活性(可以分别部署A,B,C),则可以创建3个不同的任务,每个任务都有两个容器-A / B / 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"
}
]
},
非常有用。