结论:HEALTHCHECK 定义容器健康判定逻辑,让 Docker 知道进程活着之外应用是否真的可用;restart policy 决定容器退出后是否自动拉起,二者互补:探活管状态可见性,重启管故障恢复。
展开:HEALTHCHECK 配置如 HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 CMD curl -f http://localhost/health || exit 1,状态在 starting/healthy/unhealthy 间流转,--start-period 给慢启动应用宽限期,这是常被忽略的参数。重启策略四档:no(默认不重启)、always(总是重启,宿主机重启后也会拉起)、unless-stopped(同 always 但手动 stop 后不拉起)、on-failure[:N](仅非零退出码时重启,可限次数)。易错点有三:1)restart 只在进程退出时触发,unhealthy 状态本身不会让 Docker 重启容器,需要编排层(如 K8s liveness probe)或外部工具联动;2)on-failure 对正常退出(退出码 0)不重启,批处理任务要注意;3)健康检查命令本身消耗资源,间隔别太密。生产上一般 compose 里 healthcheck + depends_on condition 控制启动顺序,编排交给 K8s 后改用其原生探针。