Docker 健康检查(Healthcheck)

Docker 支持自定义健康检查(Healthcheck),能主动检测容器内应用是否真的 "健康"(而非仅容器进程运行)。

1. 为容器配置健康检查(两种方式)
方式 1:运行容器时指定健康检查
复制代码
# 示例:检查Nginx是否正常(通过curl访问80端口)
docker run -d \
  --name nginx-test \
  --health-cmd "curl -f http://localhost:80 || exit 1" \  # 健康检查命令(失败则退出码1)
  --health-interval 30s \                                # 检查间隔(每30秒检测一次)
  --health-timeout 5s \                                  # 检查超时时间
  --health-retries 3 \                                   # 连续失败3次标记为不健康
  --health-start-period 60s \                           # 容器启动后,延迟60秒开始首次检查(适配应用启动耗时)
  nginx
方式 2:Dockerfile 中配置健康检查(构建镜像时)
复制代码
FROM nginx
# 安装curl(基础镜像可能没有)
RUN apt update && apt install -y curl && rm -rf /var/lib/apt/lists/*
# 配置健康检查
HEALTHCHECK --interval=30s --timeout=5s --retries=3 --start-period=60s \
  CMD curl -f http://localhost:80 || exit 1
2. 查看容器健康状态
复制代码
# 方式1:docker ps 直接查看(STATUS列会显示健康状态)
docker ps

# 示例输出(重点看 "healthy" 标识):
# CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                    PORTS     NAMES
# abc123         nginx     "/docker-entrypoint...."   5 minutes ago    Up 5 minutes (healthy)    80/tcp    nginx-test

# 方式2:查看详细健康状态(含检查日志)
docker inspect --format '{{json .State.Health}}' 容器名/容器ID | jq

# 示例输出(解读关键字段):
{
  "Status": "healthy",        # 健康状态:healthy/starting/unhealthy
  "FailingStreak": 0,         # 连续失败次数
  "Log": [                    # 检查日志(可排查失败原因)
    {
      "Start": "2025-12-15T10:00:00+08:00",
      "End": "2025-12-15T10:00:02+08:00",
      "ExitCode": 0,          # 0=成功,非0=失败
      "Output": "<!DOCTYPE html>...(nginx正常响应内容)"
    }
  ]
}
相关推荐
Mikko713 分钟前
Linux 磁盘满了但 du 找不到?LVM 扩容 df 不变?fstab 写错开不了机?三台真机实测磁盘排查
linux·运维·centos
蓝胖的四次元口袋19 分钟前
Jenkins知识梳理(2)
运维·jenkins
yumgpkpm28 分钟前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase
AIGC大时代30 分钟前
LLM Agent 执行沙箱闸门:失败含义与当天最小实验
docker·沙箱·闸门·bubblewrap·llm agent
Liuqy-0538 分钟前
特殊进程——孤儿、僵尸、守护进程
linux·运维·服务器
考研保研资料分享1 小时前
自动化控制保研经验合辑:上交夏令营、北工大预推免与跨专业面试复盘(2025)
运维·面试·自动化
灯澜忆梦2 小时前
【docker】#2 | 基础命令
docker·容器·eureka
乐维_lwops2 小时前
2026选择运维监控系统时应该重点考察哪些功能?
大数据·运维·人工智能
峥无2 小时前
Linux NPTL线程:创建/终止/等待/分离/栈布局内核原理|线程下篇
linux·运维·线程