Day 4:谈谈 docker 的 restart policy

经过昨天的一番努力,我们已经可以在服务无法存取的时候收到通知,那麽今天就来看看另一个议题:服务的重启。毕竟,收到通知之後还是得人工解决问题,但若是解决方法只是单纯的重新启动的话,何不让服务自己来呢?

因为 NOJ 是使用 docker compose 部署的,所以今天要研究的主题,就订为 docker 的 restart policy 吧。要学习任何的事物,我认为最简单的起头方式,就是去看官方文件(若是有些文件真的写太烂的,翻翻 source code 也是不错的选择)。

目前,docker 总共有四种 restart policy,以下取自官方文件

  • no: Do not automatically restart the container. (the default)
  • on-failure: Restart the container if it exits due to an error, which manifests as a non-zero exit code.
  • always: Always restart the container if it stops. If it is manually stopped, it is restarted only when Docker daemon restarts or the container itself is manually restarted. (See the second bullet listed in restart policy details)
  • unless-stopped: Similar to always, except that when the container is stopped (manually or otherwise), it is not restarted even after Docker daemon restarts.

可以看到,除了 no 以外都是会在满足条件的时候重开我们的 container,所以接下来要选择的就是,哪一个条件比较符合我的需求。在那之前需要先注意一点,这边讨论的 container 重启的行为,皆只有在 docker daemon 重开的时候才会触发,并不是随时都会检查的。

基本上 always 一定可以处理这些问题,可是它有个问题不管如何都一定会重开,个人认为这在我们需要服务停下的时候会造成额外的麻烦,所以我会比较偏好 unless-stopped,它跟 always 的差别是,当我们使用 docker compose stop 或是 docker stop 把 container 关掉之後,下次 daemon 重开,那些 container 还是会保持关闭的状态。

题外话

今天在查相关资料的时候发现 docker compose 的 restart 这个选项,on-failure 後面可以多接上一个数字,变成像是 on-failure:5 这样的字串,那个数字代表说 docker 会最大的尝试次数,但尝试超过这个次数还开不起来之後,便不会再试了。

有趣的是这个设定在 docker compose 的文件里面是找不到的,要到 docker run 的文件,说明 --restart 参数的部分,才可以看到说明,真的是藏的非常的深呀。

(source: docker doc)

小结

今天稍微了解了 docker 的 restart policy,正确的设定可以让我们的服务更快的恢复运作,不过通常在本机上开发的时候,我们是不会有需要设定服务自动重启的需求,若是要避免在不同的环境还要手动修改 docker compose 的设定档,建议可以把这些 production only 的设定写在另外一个档案,然後透过 docker-compose -f 去指定需要使用的档案,详细的说明可以参考官方文件

参考资料


<<:  唤醒与生俱来的数学力 (1)

>>:  Day 3. 配置写VR的Unity设定

Swift纯Code之旅 Day22. 「切割TableView(1) - 实作TableViewHeader」

前言 新增闹钟页面的画面几乎都完成了,但门面可是很重要的,因此开始实作闹钟的首页吧! 先参考一下IP...

Day 2 (html)

特别叮嘱禁止的错误 1.不要行内包区块 行内:(inline) span 区块:(block) p ...

Day1 补贴目录与相关概念

在这个资讯过多的时代,我们必须要具备有自己过滤资讯的能力, 网上充斥着许多的名词与概念,这边会帮各位...

Day30:The end is not the end

不知不觉过了三十天,在这三十天中,我们学习了 Coroutine 的每一个面向,我们知道 Corou...

Day 25:获取位置经纬度

本篇文章同步发表在 HKT 线上教室 部落格,线上影音教学课程已上架至 Udemy 和 Youtu...