Docker守护进程宕机的处理机制
按照Docker的设计,当通过systemctl stop docker 命令停止docker或者docker的守护进程异常退出的时候,内部的容器也随之关闭,此时多个容器同时失效,不再具备高可用,原因是所有的docker容器的进程都是守护进程的子进程。
从docker1.12版本开始,增加了live-restore选项,去掉了docker守护进程的依赖,即使docker守护进程关闭,内部的容器照样可以运行,当守护进程恢复后,容器又重新被守护进程管理。
配置方法:
编辑配置文件vim /etc/docker/daemon.json,在其中加入”live-restore”: true命令,在/usr/lib/systemd/system/docker.service中添加KillMode=process命令,如图:


KillMode=process的意思是当停止docker守护进程时只停掉主进程,而主进程产生的子进程是不会被停止,SSH服务也是这个模式,配置完成后,当执行systemctl stop/start/restart docker的时候,内部容器不会受到影响,会继续运行。
注意:
1、live-restore选项仅可以恢复重启前后配置相同的Daemon,例如,如果daemon重启之后使用了不同的网桥IP地址或者不同的graphdirve,则live-restore无法工作。
2、Daemon长时间离线会对内部的容器产生影响,因为容器在运行的时候需要向Daemon写入日志,如果Daemon变得不可用而无法处理输出,那么缓存将会被填满而影响容器写入日志,此时需要重启容器来刷新缓存,默认的缓存为64kb,可以通过改变/proc/sys/fs/pipe-max-size的值来更改内核缓存的大小。
3、live-restore选项与Docker Engine Swarm模式不兼容,当Docker Engine运行在Swarm模式下时,编排功能管理任务无法使容器根据服务规范运行。


