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正常响应内容)"
    }
  ]
}
相关推荐
程序员-Benothing10 分钟前
Shell 脚本条件判断与流程控制:if for while case 详解
linux·运维·服务器
IT摆渡者1 小时前
基于 Docker 部署 Nextcloud 私有云盘(外挂 Windows 共享)项目实践
运维·docker·容器
做运维的阿瑞2 小时前
Linux下DNS服务器搭建
linux·运维·服务器
团子股股东峥哥2 小时前
day37-RHEL-管理基本存储
linux·运维·服务器
天远API2 小时前
零信任架构实战:基于天远全能消金报告构建自动化消费分期网关
运维·人工智能·架构·自动化
Android系统攻城狮2 小时前
Linux Gstreamer深度解析之gst_audio_converter_reset调用流程与实战(二十一)
linux·运维·服务器·gstreamer音视频·音视频进阶
墨香幽梦客2 小时前
Kubernetes+Istio实现CRM系统弹性伸缩:服务网格下的流量治理与熔断策略
容器·kubernetes·istio
新时代牛马2 小时前
单机 docker run 管不住了?从编排需求、期望状态到调度/自愈闭环讲透
运维·docker·容器
binqian3 小时前
Docker Desktop(WSL2 后端)三层网络互通技术文档
网络·docker·容器
代码方舟3 小时前
零信任架构实战:基于天远全能消金报告构建自动化信用合规网关
运维·人工智能·架构·自动化