首页/云/Docker 容器速查/docker run 运行时健康检查参数
基础命令50 条

docker run 运行时健康检查参数

启动时用 --health-cmd 等参数为容器加健康检查,Docker 周期性执行该命令并记录状态,docker ps 的 STATUS 会显示 (healthy)。

Docker 容器速查云更新于 2026-10-13

运行时健康检查参数

运行时用 --health-cmd 等参数给容器加健康检查,效果与镜像里的 HEALTHCHECK 相同,但不用改镜像,适合给第三方镜像补检查。Docker 按周期执行检查命令并记录状态,docker ps 的 STATUS 列会显示 (healthy) 或 (unhealthy)。

基本信息

必填项--health-cmd 检查命令
周期参数--health-interval 默认 30s,--health-timeout 默认 30s,--health-retries 默认 3
宽限--health-start-period 给启动阶段留时间
状态变化starting → healthy 或 unhealthy,仅作标记不触发重启
查看docker inspect -f '{{.State.Health.Status}}' 容器

典型使用场景

  • 给官方镜像(nginx、redis 等)补上业务相关的检查,不必自己维护镜像
  • 临时容器快速补检查,让编排的依赖等待条件立即可用
  • 排查应用假死:进程还在但接口不响应时,健康状态能直接暴露出来
  • 验证一条检查命令是否可用,先命令行跑通再固化进 Dockerfile 或 compose
  • 演练与压测中用检查结果做自动化判定,免掉人工确认环节
  • 给巡检脚本一个稳定的可用性判据,比只判断容器是否在运行更贴近真实

示例

示例
docker run -d --name web \
  --health-cmd 'wget -qO- http://localhost/ >/dev/null || exit 1' \
  --health-interval 30s --health-timeout 5s --health-retries 3 \
  nginx:1.27-alpine
docker inspect -f '{{.State.Health.Status}}' web       # healthy/unhealthy/starting
docker inspect -f '{{json .State.Health}}' web | jq .   # 含最近几次检查的输出与退出码

参数与取值建议

参数默认值调整建议
--health-cmd无,必须显式指定选容器内确实存在的工具,避免退出码 127
--health-interval30s按可接受的故障发现时间设定,不宜过密
--health-timeout30s略大于检查命令的正常耗时
--health-retries3与 interval 组合决定判定不健康的总延迟
--health-start-period0s冷启动慢的应用必须加长
健康状态只是标记,Docker 不会据此重启容器;Swarm、Kubernetes 等编排会读取它做调度与滚动更新决策,语义与单机不同。
运行时参数与镜像里的 HEALTHCHECK 同时存在时以运行时为准,所以给第三方镜像补检查不需要重新构建镜像。
检查的历史结果保存在容器状态里(docker inspect 的 State.Health.Log,只保留最近若干次),从最近几次的退出码能看出是持续失败还是偶发抖动。

易错点

  • 检查命令依赖镜像里没有的工具(如 curl),会一直失败并报退出码 127,先确认容器内有哪些可用命令
  • start-period 设得过短会把初始化阶段误判为故障,慢启动服务按冷启动时间留足宽限
  • 检查命令写成会触发副作用的接口(如下发任务、写数据),会造成重复操作,健康检查必须是只读的
  • 只看 (healthy) 就以为业务正常:检查通过但业务接口异常的情况要靠指标与日志补上
  • interval 与 retries 设得过松时故障发现会延迟到几分钟之后,编排在这段时间里仍会继续放流量进来

数据来源与参考

  • Docker 官方 CLI 参考:docker run --health-cmd 系列(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌