本系列目录请看这里
https://blog.csdn.net/michel4liu/article/details/80819510
我们之前已经可以通过后台线程运行一个docker容器,接下来我们将要处理另一个问题,当docker的容器因意外挂掉了,例如:docker服务重启、机器重启、容器本身异常退出等原因 导致容器停止对外工作,我们此时需要做的就是有一个监控容器是否关闭的软件进行守护运行,此类软件有很多如upstart,systemd或者supervisor等等,但是docker不推荐这种做法 因为这依赖于系统平台或软件版本不同配置不同。接下里我们将介绍docker自己的守护方式 restart policy。
restart policy
在docker run时通过
--restart
设置守护机制,有四种模式
no:不自动重新启动容器。(默认)
on-failure :由于一个错误退出,它表现为退出状态不等于0,自动启动容器
unless-stopped :除非被显式停止 stop、kill 否则docker服务停止或自动重启,自动启动容器
always:如果容器停止,总是重新启动容器。(这是官方解释,我测试了如果手动kill容器 无法自动重启,应该也属于正常 如果手动都不能让他停止 也许我们会更烦恼怎么停止它~~~~)
对于上面的模式 我们生产常用的只有 always
实际测试参数:restart
容器run时添加restart参数
docker run -d -p 80:12345 --restart always --name web weba:v0.1
1、先设置 run 的 restart always :
2、docker ps 查看了当前运行的容器
3、重启docker 服务
4、再次docker ps 查看当前运行的容器,此时发现已经自动启动容器
5、最后用网页查看一下 web是否启动
具体内容看下图
如果run时没有添加restart 可以通过update命令追加
docker update --restart=always web
1、先后台启动容器未加restart参数
2、docker ps 查看了当前运行的容器
3、重启docker 服务
4、再次docker ps 查看当前运行的容器,发现容器并没有运行
5、利用 update 设置 restart=always
6、重启docker 服务
7、再次docker ps 查看当前运行的容器,此时发现已经自动启动容器
使用重新启动策略时请记住以下几点:
1. 重新启动策略仅在容器启动成功后才生效。在这种情况下,启动成功意味着容器已启动至少10秒,并且Docker已开始监视它。这可以防止根本不启动的容器进入重启循环。
2. 如果手动停止容器,则会忽略其重新启动策略,直到Docker守护程序重新启动或手动重新启动容器。这是另一个防止重启循环的尝试。
3. 重新启动策略仅适用于容器。群集服务的重新启动策略配置不同。查看与重新启动服务相关的 标志。
官方介绍在此,以上内容引用官网内容
https://docs.docker.com/engine/admin/start-containers-automatically/#use-a-process-manager
本系列目录请看这里
https://blog.csdn.net/michel4liu/article/details/80819510