docker 容器里面重启nginx_打不死的小强!-Docker容器自动重启策略
在《Docker实战入门教程(一)》和《Docker实战入门教程(二)》中,运行应用容器后,如果容器意外停止(无论人为或应用异常出错等情况下),那么应用将变得不可使用,这样看来,Docker的容器技术是不是如此脆弱呢?!答案当然是否定的!! 事实上,Docker容器技术是“打不死的小强”,原因是Docker提供了容器的重新启动策略,此策略控制容器在退出时或Docker重新启动时是否自动启动容器。.
在《Docker实战入门教程(一)》和《Docker实战入门教程(二)》中,运行应用容器后,如果容器意外停止(无论人为或应用异常出错等情况下),那么应用将变得不可使用,这样看来,Docker的容器技术是不是如此脆弱呢?!答案当然是否定的!!
事实上,Docker容器技术是“打不死的小强”,原因是Docker提供了容器的重新启动策略,此策略控制容器在退出时或Docker重新启动时是否自动启动容器。
重启策略配置
要为容器配置重新启动策略,在使用docker run命令时使用--restart标志。
--restart标志的值包括如下几种:
1.no
容器退出时,不自动重启容器。这是默认值。
2.on-failure[:max-retries]
当容器以非零状态码(正常退出时状态码为0)退出时,重新启动。max-retries为最大重试次数(可选),限制Docker守护程序尝试的重新启动重试次数。如不指定最大重试次数,默认为不断重试。
3.always
无论退出状态如何,始终重新启动容器。Docker守护程序将无限期地尝试重新启动容器。无论容器的当前状态如何,容器也将始终在守护程序启动时启动。
4.unless-stopped
类似always,无论退出状态如何,重新启动容器。区别在:如果容器在Docker守护程序停止之前已经处于停止状态,那么守护程序启动时,容器不会重新启动。
以下是几个示例:
docker run --restart=always redis
运行redis容器,配置的重启策略是always,这样,如果容器redis无论什么情况停止了,Docker将自动重新启动redis容器。
docker run --restart=on-failure:10 redis
运行redis容器,配置的重启策略是on-failure:10,在容器异常退出时,Docker将自动尝试重新启动redis容器,最多尝试10次。如果redis容器以非零退出状态退出连续10次以上,Docker将中止尝试重新启动容器。
重启策略机制
1.重启策略仅在容器成功启动后生效。成功启动意味着容器启动后,状态为UP至少10秒以上并且Docker已开始监视。这种机制,其实是Docker防止没有启动的容器进入重启循环。
2.如果手动停止容器,则会忽略其重新启动策略,直到Docker守护程序重新启动或手动重新启动容器。这是防止重启循环的另一种措施。
3.容器每次重新启动之前,都会添加一个不断增加的延迟(前一个延迟的两倍,从100毫秒开始),以防止堵塞服务器。这意味着守护进程将等待100 ms,然后等待200 ms、400 ms、800 ms、1600 ms等,直到on-failure的次数限制,或者人工停止容器(docker stop)和强制删除容器(docker rm -f)。如果容器成功重新启动(容器启动并运行至少10秒),则延迟将重置为其默认值100 ms。
4.容器启动参数--restart和--rm不能同时出现在一条命令中,否则会产生冲突。
5.容器重启时,连接的客户端将被强行断开。
6.重新启动策略仅适用于容器。群组服务的重新启动策略配置与容器的重启策略不同。本文暂不涉及。
容器退出代码
docker run 命令会提供有关容器无法运行的原因或退出原因的信息代码,以下是常见的几个代码:
1. 正常退出,代码为:0
2. 如果错误与Docker守护程序本身有关,代码为:125
3. 如果无法调用包含的命令,代码为:126
4. 如果找不到包含的命令,代码为:127
今天的分享就到这里,欢迎大家关注,收藏,转发,评论。谢谢大家支持!
更多推荐
所有评论(0)