Python 优雅地停止ecs容器

Python 优雅地停止ecs容器,python,docker,amazon-ecs,Python,Docker,Amazon Ecs,我有一些docker容器,它监听RabbitMQ并处理收到的消息。我有一个代码管道,当有代码提交时,它开始重建图像和更新任务 我这里的问题是,在消息处理过程中,容器将被突然终止。是否有任何方法可以停止容器终止,直到过程完成,并允许其停止,以便自动创建一个新的容器,因为我同意当前容器使用旧代码处理消息。我的容器内部正在运行python代码。在Docker中实现优雅停靠的两种方法: 使用docker停止 当向容器发出docker stop命令时,docker向容器内的进程发出SIGTERM信号,并等

我有一些docker容器,它监听RabbitMQ并处理收到的消息。我有一个代码管道,当有代码提交时,它开始重建图像和更新任务


我这里的问题是,在消息处理过程中,容器将被突然终止。是否有任何方法可以停止容器终止,直到过程完成,并允许其停止,以便自动创建一个新的容器,因为我同意当前容器使用旧代码处理消息。我的容器内部正在运行python代码。

在Docker中实现优雅停靠的两种方法:

使用docker停止 当向容器发出
docker stop
命令时,docker向容器内的进程发出
SIGTERM
信号,并等待10秒钟,然后清理容器

您可以指定10秒以外的超时时间:

docker stop --time 30 <CONTAINER>
还要确保进程正确处理指定的信号。比
docker stop
更糟糕的是,
docker kill
命令没有超时行为。

停止任务 停止正在运行的任务

当对任务调用
StopTask
时,docker stop的等效值为 发布到任务中运行的容器。这导致了 SIGTERM和默认的30秒超时,然后发送SIGKILL 容器被强行停止。如果容器处理 SIGTERM优雅地退出,并在收到后30秒内退出,否 SIGKILL已发送

注意

可以在Amazon ECS上配置默认的30秒超时 带有ECS\u container\u STOP\u TIMEOUT变量的容器代理。更多 有关详细信息,请参阅中的Amazon ECS容器代理配置 亚马逊弹性容器服务开发者指南


知道了这一点,您可以在应用程序中添加一个简单的检查来捕获SIGTERM,并做出适当的反应。

感谢您的响应,因此如果我能够捕获SIGTERM并更改默认超时,我可以等待过程完成,即使它需要更长的时间,如最长30分钟?该问题特别要求亚马逊ECS()提供帮助,ECS为您管理容器,不提供对原始docker cli命令的访问。
docker kill --signal SIGQUIT <CONTAINER>