- 使用 Docker 的原生重启策略来处理系统故障。
- 对处于不健康状态的容器实施自定义脚本和定时任务。
- 与 systemd 进行高级集成,以控制启动和关闭顺序。
- 外部监控替代方案和工具,例如 Podman Quadlet。
我相信你肯定遇到过这种情况:你有一个服务正在运行…… Docker 不知何故,它每隔几天就会卡住一次。 Docker容器停止响应时如何自动重启? 尝试优化代码或配置却毫无效果,最后发现只需手动重启一下就能解决问题,而且还能让一切再运行一周,这确实令人沮丧。与其不断查看时间,理想的解决方案是搭建一个系统来帮你完成这些繁琐的工作。
管理容器可用性不仅仅是确保它们在服务器开机时自动启动。 确保他们做出正确回应 对于这些请求,有时容器对 Docker 来说似乎“处于活动状态”,但其中的应用程序却无响应,这迫使我们寻找各种解决方案,从基本的守护进程参数到在操作系统中创建复杂的服务。
Docker 原生重启策略
自动重启 Docker 容器的最简单方法是使用标志。 --restart 启动容器或使用命令时 docker update 如果容器已经创建,Docker 会根据您的需求提供多种选项。例如,策略 总是 这将导致容器始终重新启动,无论该进程是否以错误结束,或者是否是 Docker 守护程序本身重新启动。
如果您更倾向于手术方式, 除非停止 这是许多人的首选。此配置与之前的配置相同,区别在于如果您手动停止容器进行维护, Docker不会尝试启用它。 服务器重启后自动执行,尊重您的手动选择。
对于那些只想在出现重大失误后才采取行动的人来说, 失败时此策略仅在容器以非零退出代码终止时才会触发重启。您还可以通过设置最大重试次数来限制重启次数,从而防止系统在错误持续且严重时陷入无限重启循环。

针对“不健康”容器的自动化
事情变得有趣起来了。有时,容器仍然显示为“运行中”(开启),但其健康状况却并非如此。 不良 因为它未能通过内部审核。之前的政策在这里无效,因为该流程在技术上并未失效。为了解决这个问题,我们可以实施该指令。 健康检查 在 Dockerfile 或 Docker Compose 文件中,定义一个命令(例如 curl 发送到特定端口)以验证应用程序是否响应。
一旦我们设置好健康检查,我们就可以创建一个 Bash脚本 它每隔几分钟运行一次,使用 crontab 来自 Linux 系统。此脚本应过滤掉处于以下状态的容器: unhealthy 或者那些以错误代码 128 退出并运行 docker restart 关于他们。
为了使此功能顺利运行并自动重启 Docker 容器,运行 cron 作业的用户必须拥有必要的权限。 docker 组所需的权限这样,该系统每隔 5 或 10 分钟监控一次环境,并启动任何变成“僵尸”的服务,从而保证几乎完全的可用性,而无需人工干预。
与 systemd 的高级集成
在更专业的环境中工作时,您可能希望容器的行为类似于 原生 Linux 服务整合 Docker Systemd 允许您管理复杂的依赖关系,例如确保数据库在 Web 应用程序启动之前启动。这是通过创建文件来实现的。 .service 在路线上 /etc/systemd/system/.
我们可以设计一个 关机和开机顺序 受控的。通过使用链接到 systemd 的自定义脚本,可以按照依赖项的逆序停止容器,以防止数据损坏。使用类型 oneshot 并进行配置 targets 合适的(例如) multi-user.target o shutdown.target服务器负责处理容器的整个生命周期。
另一个强大的方法是在 Docker 容器停止响应时自动重启它的选项是使用标志。 --rm 结合 systemd,这样可以在停止运行时删除容器,并在启动时从基础镜像创建一个新容器,从而确保…… 容器的状态必须始终保持清洁且未发生变化。将数据持久性完全委托给外部卷。

外部工具和现代替代方案
如果你不想费力编写 Bash 脚本,可以使用第三方工具。还有一些开源应用程序专门用于根据容器状态重启容器。 既定时间表这对于诸如续订 SSL 证书之类的重复性任务非常有用。同样,诸如以下工具也很有用: Uptime Kuma 它们允许您通过可视化仪表板监控服务运行状况,并在出现问题时向 Telegram 或 Gotify 发送通知。它们对于在 Docker 容器停止响应时自动重启容器都非常有用。
对于那些寻求更轻便或更本土化替代品的人来说, Podman 这是一个绝佳的选择。这得益于其无守护进程架构和功能…… 四元组它允许您创建简单的声明式文件,systemd 会自动将其转换为优化的服务,从而提供比传统 Docker 更自然的集成。
全面掌控服务的生命周期需要结合使用以下方法: 重启策略通过持续监控 健康检查 在更复杂的情况下,还需要支持 systemd 或监控工具 这样一来,您的基础设施就非常强大,无需依赖有人每周手动重启服务器。
专门研究技术和互联网问题的编辑,在不同数字媒体领域拥有十多年的经验。我曾在电子商务、通讯、在线营销和广告公司担任编辑和内容创作者。我还在经济、金融和其他领域的网站上撰写过文章。我的工作也是我的热情所在。现在,通过我的文章 Tecnobits,我尝试探索技术世界每天为我们提供的所有新闻和新机会,以改善我们的生活。