Docker compose 加速docker compose关闭

Docker compose 加速docker compose关闭,docker-compose,Docker Compose,当我将应用程序设置为通过docker compose up运行时,需要几秒钟才能在ctrl+c上停止。但是,如果我运行docker kill…,容器会很快停止。在docker compose up中通过ctrl+c终止时,我可以做些什么来加快容器关闭速度 特别是,当docker compose说它“优雅地停止”时,它实际上意味着什么?docker compose是否正在尝试某种关机协议,然后仅在超时后杀死我的容器 当docker compose说它“优雅地停止”时,它实际上意味着什么 基本上,当

当我将应用程序设置为通过docker compose up运行时,需要几秒钟才能在ctrl+c上停止。但是,如果我运行
docker kill…
,容器会很快停止。在
docker compose up
中通过ctrl+c终止时,我可以做些什么来加快容器关闭速度

特别是,当docker compose说它“优雅地停止”时,它实际上意味着什么?docker compose是否正在尝试某种关机协议,然后仅在超时后杀死我的容器

当docker compose说它“优雅地停止”时,它实际上意味着什么

基本上,当您执行Ctrl+C时,您将向在前台运行的应用程序发送一个SIGINT(2)信号。大多数情况下,此信号的语义类似于执行
docker compose stop
时发出的SIGTERM(15)信号,或者更基本地说,如果您专注于单个容器应用程序,则发出的SIGTERM(15)信号

docker compose是否正在尝试某种关机协议,然后仅在超时后杀死我的容器

是的,其思想是运行中的应用程序可以捕获SIGINT和SIGTERM信号,并在退出之前执行一些清理操作

相反,SIGKILL(9)信号(例如由
docker kill
引发)会导致进程立即终止

您可能会对这个相关的例子感兴趣,我给出了一个EntryPointBash脚本的玩具示例,它“捕获”了SIGINT和SIGTERM信号(当然不是SIGKILL)

在docker compose up中通过ctrl+c终止时,我可以做些什么来加速容器关闭

我想说,当您执行
docker stop
操作时,容器退出所花费的时间很大程度上取决于相应映像的实现

乍一看,您可能会修改(例如缩短)提供给容器的时间,使其正常停止:

  • docker stop-t超时
  • docker compose stop-t超时
但这肯定不是一个恰当的解决方案

实际上,在依赖入口点bash脚本时,有两个典型的陷阱:

  • 使用bash脚本作为包装器最终调用另一个程序,但忘记使用
    exec
    内置程序。
    → 建议使用
    exec
    (例如,请参见)

  • 当bash脚本本身不应该立即终止时,可能会忘记捕获信号(包括SIGINT和SIGTERM)并相应地进行操作,这也可能是您观察到的问题的原因。这与所谓的 → 要解决此问题,您可能需要使用
    docker run
    标志运行图像,或者添加
    docker compose.yml
    参数