容器生命周期怎么通过守护进程管理崩溃的容器

千伟小哥_8850

千伟小哥_8850

2026-10-02

996人浏览

原创

docker守护进程通过--restart策略实现容器自愈:always无条件重启,unless-stopped在手动停止后不重启,on-failure仅非零退出码时重启(可限次),配合healthcheck可提升状态感知能力。

容器生命周期怎么通过守护进程管理崩溃的容器

守护进程管理崩溃容器,核心是让 Docker 自己接管重启逻辑,而不是依赖外部脚本或人工干预。关键不在“守护进程”这个词本身,而在于 Docker 守护进程(dockerd)内置的重启策略与健康检查机制。

用 --restart 策略让容器自动重启

Docker 原生支持在容器退出后按预设规则重启,这是最直接、最轻量的“自愈”方式。策略生效的前提是容器已以守护进程模式(-d)启动,且策略在启动时就指定:

  • always:无论退出码是多少(包括 0),只要容器停止,就立即重启。适合长期运行的关键服务,比如 Nginx、数据库代理等
  • unless-stopped:和 always 类似,但若你手动执行 docker stop,它就不会再自动重启。这是生产环境更稳妥的选择,避免误操作后反复拉起
  • on-failure[:max]:只在非零退出码时重启,可限制最多重试次数(如 on-failure:3)。适合批处理类应用,防止因代码缺陷无限循环重启

示例命令:
docker run -d --restart=unless-stopped --name api-server -p 3000:3000 my-api:1.2

Dolphindb Docker
Dolphindb Docker

自动化 DolphinDB Docker 部署,支持自动架构检测(ARM64/x86_64),智能内存分配(50% 规则)以及完整数据持久化。

下载

搭配 HEALTHCHECK 实现状态感知重启

单纯靠退出码不够智能——有些容器进程没死,但内部服务已卡死(比如 HTTP 接口一直超时)。这时需要健康检查主动探测:

  • 在 Dockerfile 中定义:
    HEALTHCHECK --interval=10s --timeout=3s --retries=2 CMD curl -f http://localhost/health || exit 1
  • 运行时配合 --restart=on-failure:一旦健康检查连续失败,Docker 会将容器标记为 unhealthy,并触发重启
  • 注意:健康检查本身不杀容器,它只是提供状态信号;真正执行重启动作的,仍是 restart 策略

确保守护进程本身可靠运行

Docker 守护进程(dockerd)必须开机自启且稳定,否则所有自动恢复都失效:

  • Linux 系统下确认服务状态:systemctl is-active docker 和 systemctl is-enabled docker
  • 若未启用开机自启,运行:sudo systemctl enable docker
  • 宿主机重启后,只要 dockerd 启动了,设置了 unless-stopped 或 always 的容器就会自动拉起

避免常见陷阱

自动恢复不是万能的,几个容易忽略的点:

  • 容器被 docker stop 停止后,always 策略也不生效,只有 unless-stopped 能绕过这个限制
  • OOM(内存溢出)被内核杀死时,退出码是 137,on-failure 可捕获,但频繁 OOM 说明资源配置不合理,需调优而非依赖重启
  • 挂载的卷或网络配置错误会导致容器反复启动失败,此时 restart 策略只会不断重试,需结合 docker logs 和 docker inspect 查根本原因

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

docker

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

20

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

0

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

0

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

20

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

20

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

220

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

140

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

120

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

60

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Docker 官方文档
Docker 官方文档

共0课时 | 0人学习

宝塔 Docker 模块使用手册
宝塔 Docker 模块使用手册

共0课时 | 0人学习