健康检查需按服务角色差异化设计:前端检查nginx静态响应(如get /,200状态),后端用spring boot actuator探活依赖(/actuator/health,60秒启动延迟),数据库与缓存用原生命令(mysqladmin ping、redis-cli ping),跨服务依赖须配置condition: service_healthy确保真正就绪。
健康检查在前后端分离架构中不能“一刀切”,必须按服务角色差异化设计:前端是静态资源托管,后端是动态业务服务,数据库和缓存则承担数据支撑职能。直接套用同一套健康检查逻辑,容易导致误判、启动失败或流量错配。
前端 Nginx 容器:检查静态服务可达性
Vue 打包后的前端本质是 Nginx 托管的 HTML/JS/CSS 文件,不涉及业务逻辑。健康检查应聚焦“服务是否响应”而非“业务是否就绪”。
- 用 HTTP GET 请求根路径(如
/index.html或/),验证 Nginx 进程存活且能返回 200 状态码 - 避免检查
/health这类后端专用路径——前端镜像里根本不存在该接口 - 超时设为 3–5 秒即可,因静态响应极快;重试次数建议 2 次,防止瞬时网络抖动误判
后端 Spring Boot 容器:检查业务就绪态
Spring Boot 启动耗时长,依赖数据库、Redis 等外部组件。若健康检查过早触发,可能返回 404 或 500,被编排系统误判为失败。
- 必须暴露
/actuator/health(需启用 Actuator 并配置management.endpoints.web.exposure.include=health) - 推荐使用
show-details=when_authorized配合健康指示器(如db、redis),确保依赖服务真正就绪才返回UP - 检查命令示例:
curl -f http://localhost:8080/actuator/health || exit 1 - 间隔设为 20–30 秒,首次检查延迟(
--start-period)建议设为 60 秒以上,给应用充分初始化时间
数据库与缓存容器:用原生协议探活
MySQL、Redis 等中间件自带成熟健康探测能力,不建议强行走 HTTP 封装。
- MySQL 可用
mysqladmin ping -h localhost -u root -p$MYSQL_ROOT_PASSWORD,简洁可靠 - Redis 推荐
redis-cli -h localhost -p 6379 ping | grep -q 'PONG' - 避免在健康检查中执行复杂 SQL 或 KEYS 命令,防止影响主服务性能
- 对 Redis 设置
--start-period=45s,因其主从同步或持久化加载可能耗时较长
跨容器依赖协调:靠健康状态驱动启动顺序
仅靠 depends_on 不足以保证服务可用——它只控制启动先后,不等待目标容器“真正就绪”。必须结合健康检查形成闭环。
- 在
docker-compose.yml中为 MySQL、Redis 显式配置healthcheck - 后端服务的
depends_on要加上condition: service_healthy,例如:
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
- 这样 Compose 才会等数据库和缓存报告
healthy后,再启动后端容器,避免 Connection refused 报错











