docker自身给我提供了两种退出容器的方式:
- 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")
- 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号进程即可,可以使用
exec
这个命令来执行你的命令。 - 如果不是第一种情况,那么只能写一个脚本(shell,go等都可以)来监听信号,当监听到信号后做出相应的处理。
网友评论