跳到主要内容

docker进程守护

1. docker守护进程启动及自启

安装docker后,启动和开启自启docker的守护进程命令如下,需要人工手动执行

#启动docker守护进程
systemctl start docker
#linux服务器重启时,自动启动docker守护进程
systemctl enable docker.service
# 查看服务配置
systemctl cat docker.service

通过查看systemd对docker.service的配置,可以看到其中有

[Service]
ExecStart=xxx
ExecReload=xxx
Restart=always

Restart 参数含义在于服务进程退出、终止或超时后,是否重新启动服务,有三个值可以设置,分别为:no,on-failure,always

参考:Linux 中服务进程如何配置 Systemd Restart 使得服务可以自动启动

2. docker容器自启动

上面确保无论是服务器重启,还是运行中意外崩溃终止,docker守护进程都可以通过systemd来保证重启。

如果我们也需要容器也能自动重启(在服务器重启、docker守护进程重启之后),在启动容器时,使用如下命令即可:

# 启动容器时
docker run -d --restart xxx ...
# 已存在的容器
docker update --restart xxx containerid

restart有几个选项:

  • no 不需要自动重启容器(默认)

  • on-failure[:max-retries] 如果容器因程序运行错误退出(非正常退出),则重新启动容器。可选项配置:max-retries表示尝试重新启动容器的最大次数,超过这个次数还启动失败就不重启了。

  • always 如果容器处于停止状态,则始终重新启动容器。例外情况:如果该容器是运维人员手动停止的,只有在Docker守护进程发生重启或者容器本身手动重启之后,才会继续always重启策略。

  • unless-stopped 在停止Docker守护程序之前已经处于停止状态的容器,不会执行重启。其他的和always一样。

3. 守护进程停止期间保证容器服务正常

在守护进程停止(如升级docker版本之类的),此时不想影响容器提供服务,即docker守护进程停了,想要保证docker容器进程依然运行。

默认情况下,守护进程终止时,会关闭基于他运行的所有容器。可以通过配置方式,在守护进程不可用时保持容器运行,live-restore有助于减少由于守护进程崩溃、计划中断或升级导致的容器停止服务时间。

在/etc/docker/daemon.json配置中加上"live-restore":true即可。

参考资料

更多systemctl相关知识见:Systemd 入门教程:命令篇

【docker专栏7】容器自启动与守护进程停止后容器保活