美文网首页程序员Docker
docker 正确退出容器的方式

docker 正确退出容器的方式

作者: jarhmj | 来源:发表于2019-02-01 10:31 被阅读2次

    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等都可以)来监听信号,当监听到信号后做出相应的处理。

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

    相关文章

      网友评论

        本文标题:docker 正确退出容器的方式

        本文链接:https://www.haomeiwen.com/subject/wyrlsqtx.html