跳到主要内容

Docker Compose 健康检查与依赖启动顺序

· 阅读需 2 分钟
一介布衣
全栈开发者 / 技术写作者

做本地开发编排时,一个很常见的错觉是: 只要容器进程起来了,服务就算可用了。实际情况往往不是这样,尤其是数据库、消息队列和依赖初始化步骤比较多的时候。

Docker Compose 在这件事上的价值,不只是帮你把几个容器一起启动,而是让“谁先准备好、谁再连接谁”这件事更可控。

启动顺序解决不了就绪判断

depends_on 只能表达一个大致先后关系,但很多依赖服务在容器启动后还要花几秒甚至更久完成初始化。应用如果过早启动,经常会遇到:

  • 数据库端口能连,但表还没准备好
  • Redis 已经起了进程,但配置还没加载完
  • 本地 mock 服务监听了端口,但种子数据还没写入

这时候光靠启动顺序远远不够。

健康检查的意义是给“可用”下定义

我比较推荐给关键依赖补上 healthcheck,至少让编排层知道:

  • 服务是不是只是活着
  • 服务是不是已经能响应关键探活请求

这样应用启动或重试时,就能基于更接近真实可用性的信号做判断。

本地依赖初始化最好显式化

如果项目需要先执行迁移、写测试数据、准备本地对象存储桶,我更建议把这些步骤做成明确的 bootstrap 过程,而不是把它们藏在 README 的一行备注里。

健康检查负责判断服务是否就绪,bootstrap 负责把依赖准备成“可开发状态”,这两件事最好分开。

卷挂载和初始化脚本也要考虑时机

很多本地环境问题都出在数据卷沿用了旧状态,结果容器虽然健康,但业务数据早就和代码版本不匹配。遇到这种情况,只重启应用通常没用,反而要回到依赖初始化流程重新整理。

所以我会把“保留数据卷”和“重置依赖”都写进日常工作流里。

小结

Docker Compose 的启动顺序只是第一步,真正决定本地环境是否可靠的,是健康检查和依赖初始化有没有被当成正式流程来设计。把这两层补齐,团队的本地启动成本会低很多。