docker 正确退出容器的方式

docker自身给我提供了两种退出容器的方式:

  1. docker kill
    命令执行时会直接发出SIGKILL的系统信号,以强行终止容器中程序的运行。类似Linux系统中的kill -9或者是kill -SIGKILL命令,用来发送SIGKILL信号,强行终止进程。
Usage:  docker kill [OPTIONS] CONTAINER [CONTAINER...]

Kill one or more running containers

Options:
  -s, --signal string   Signal to send to the container (default "KILL")
  1. docker stop
    命令执行时,会先向容器中PID为1的进程发送系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间,或者默认的10秒,会继续发送SIGKILL的系统信号强行kill掉进程。
Usage:  docker stop [OPTIONS] CONTAINER [CONTAINER...]

Stop one or more running containers

Options:
  -t, --time int   Seconds to wait for stop before killing it (default 10)

两者区别:

不难看出两者的区别,kill是直接强制kill掉进程然后退出容器,或者直接发送其他信号然后退出,而stop是可以设置一个延迟的时间,这个时间你可以用来处理一些退出容器前的工作,显然要想优雅的退出容器stop肯定是不二之选。

采坑点:

  • stop 传递的信号只能1号进程接收到,其他进程接收不到。
  • stop 传递的信号只能是SIGTERM信号。

解决办法:

  1. 如果你的进程自己能处理退出的工作,那么只需让他变成1号进程即可,可以使用exec这个命令来执行你的命令。
  2. 如果不是第一种情况,那么只能写一个脚本(shell,go等都可以)来监听信号,当监听到信号后做出相应的处理。

欢迎大家评论,提供优雅的解决办法,谢谢😘!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容