--health-retries 指定健康检查连续失败多少次后容器状态变为 unhealthy,需配合 --health-cmd、--health-interval 和 --health-timeout 使用;默认值为 3,失败计数遇成功即重置,且受 --health-start-period 宽限期保护。
通过 --health-retries 参数,你可以指定容器健康检查失败多少次后,docker 才将其状态标记为 unhealthy。
它和健康检查失败的关系
--health-retries 不是独立起作用的,必须配合 --health-cmd、--health-interval 和 --health-timeout 一起使用。Docker 会按固定间隔执行健康检查命令,每次执行视为一次“尝试”。如果命令返回非零退出码(或超时),就计为一次失败;连续失败达到 --health-retries 指定的次数,容器状态就会从 healthy 变为 unhealthy。
常见设置示例
例如启动一个 Nginx 容器,并设定:健康检查每 10 秒执行一次,超时 3 秒,连续失败 3 次即判为不健康:
docker run -d \ --name my-nginx \ --health-cmd "curl -f http://localhost/ || exit 1" \ --health-interval=10s \ --health-timeout=3s \ --health-retries=3 \ --health-start-period=30s \ -p 8080:80 \ nginx
这意味着:若连续 3 次(即最多 30 秒内)curl 都失败,容器状态变为 unhealthy。
注意几个关键点
- “连续失败”才计数:只要某次检查成功,失败计数会重置为 0
-
启动初期有宽限期:用
--health-start-period设置容器启动后多久才开始健康检查(避免应用还没就绪就被误判) -
状态变更需主动观察:Docker 不会自动重启或删除容器,除非你额外配置了
--restart=on-failure或用编排工具(如 Swarm、Kubernetes)联动处理 -
默认值是 3:如果不显式指定
--health-retries,Docker 就按 3 次失败来判定
如何验证是否生效
运行容器后,可用以下命令查看实时健康状态和失败历史:
docker inspect --format='{{.State.Health}}' my-nginx
输出中会显示 FailingStreak(当前连续失败次数)和 Log(最近几次检查的时间、命令、退出码等),便于调试阈值是否符合预期。











