我正在通过ECS运行Docker容器。启动后,容器将运行一个将执行某些特定操作的过程。这些操作可能需要几分钟才能完成。

ECS将在集群中运行多个EC2实例(每个实例运行多个容器)。这些容器的启动将根据我们向CloudWatch报告的某些特定指标自动缩放。

问题是当我们需要缩小容器规模时。我们需要适当地关闭容器(因为它们将在运行进程),并且我不希望它在不完成容器上正在运行的进程的情况下杀死容器。

我已经看到并且Docker不支持关闭钩子(Hook)https://github.com/moby/moby/issues/2100

我想做到这一点的一种方法是缩小No。通过跟踪正在运行的实例及其状态,由应用程序本身对实例进行分析。我只是想知道在这方面是否还有其他解决方案/想法?

最佳答案

虽然Docker不支持关闭挂钩,但可以将docker-master信号使用SIGINTSIGTERM信号。只需定义过程的PID并在entrypoint.sh中使用它即可:

trap "{ echo Received SIGTERM; kill -s SIGTERM $MAIN_PROCESS_ID; wait $MAIN_PROCESS_ID; }" SIGTERM
trap "{ echo Received SIGINT; kill -s SIGINT $MAIN_PROCESS_ID; wait $MAIN_PROCESS_ID; }" SIGINT

07-24 09:39
查看更多