docker 优雅退出
docker 优雅退出
优雅退出
以nginx为例,dockerfile的cmd那一行,如果直接是nginx启动命令,那么nginx就是1号进程,是主进程,主进程挂了,同一容器内的其他进程也会跟着退出。
容器退出时会先docker stop,即kill -15信号,长时间未响应才会docker kill,即kill -9
上面的情况,kill -9退出时是不优雅的,如果正在读写一个nginx的静态文件,可能会导致文件损坏
而dockerfile里的cmd是用startup.sh启动nginx的时候,脚本就成了1号进程,nginx成了3号进程,脚本挂了,nginx这种附属进程也挂了,但是脚本不能像nginx似的接受 kill -15和kill -9决定进程状态
那么为了优雅退出,需要用trap在脚本里,需要让dockerdaemon把信号发送给1号进程,然后脚本再传给应用进程。这样进程先退出,然后1号进程再退出,容器就可以回收了
延迟停止
//在30秒后停止一个容器名为nginx-1的容器,默认是10秒
docker stop -t 30 nginx-1