gpt4 book ai didi

docker-compose - 加速 docker-compose 关机

转载 作者:行者123 更新时间:2023-12-01 12:12:46 26 4
gpt4 key购买 nike

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

特别是,当 docker-compose 说它“优雅地停止”时,它实际上是什么意思? docker-compose 是否尝试了一些关闭协议(protocol),然后仅在超时后才杀死我的容器?

最佳答案

what does it actually mean when docker-compose says it is "gracefully stopping "?



基本上,当您执行 Ctrl+C 时,您正在向在前台运行的应用程序发送 SIGINT (2) 信号。大多数时候,这个信号的语义类似于在执行 docker-compose stop 时引发的 SIGTERM (15) 信号。或者更基本的 docker stop如果您专注于单容器应用程序。

Is docker-compose trying some shutdown protocol and then killing my container only after a timeout?



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

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

您可能对此相关的 SO answer 感兴趣在这里,我给出了一个“捕获” SIGINT 和 SIGTERM 信号(当然不是 SIGKILL)的入口点 bash 脚本的玩具示例。

Is there anything I can do to speed up container shutdown when killed via ctrl+c within docker-compose up?



我会说当您执行 docker stop 时您的容器退出所花费的时间或如此强烈地依赖于相应图像的实现。

乍一看,您可能会修改(例如,缩短)提供给容器以正常停止的时间:
  • docker stop -t TIMEOUT (doc)
  • docker-compose stop -t TIMEOUT (doc)

  • 但这肯定不是一个适当的解决方案。

    其实有两个 典型的陷阱当一个人开始依赖 入口点 bash 脚本 :
  • 使用 bash 脚本作为包装器最终调用另一个程序,但忘记使用 exec内置。
    → 推荐的做法是在 bash 入口点的最后一个命令前面加上 exec(例如,参见 this line from entrypointd.sh in sudo-bmitch/docker-base )。
  • 当 bash 脚本本身不应立即终止时,可能会忘记注意捕获信号(包括 SIGINT 和 SIGTERM)并采取相应的行为,这也可能是您观察到的问题的原因。这与所谓的PID 1 zombie reaping problem有关.
    → 要解决此问题,您可能需要使用 docker run 运行镜像。旗帜 --init ,或添加 docker-compose.yml参数 init (related SO Q.)
  • 关于docker-compose - 加速 docker-compose 关机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50534605/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com