Docker Compose 健康检查与依赖启动顺序
· 阅读需 2 分钟
做本地开发编排时,一个很常见的错觉是: 只要容器进程起来了,服务就算可用了。实际情况往往不是这样,尤其是数据库、消息队列和依赖初始化步骤比较多的时候。
Docker Compose 在这件事上的价值,不只是帮你把几个容器一起启动,而是让“谁先准备好、谁再连接谁”这件事更可控。
启动顺序解决不了就绪判断
depends_on 只能表达一个大致先后关系,但很多依赖服务在容器启动后还要花几秒甚至更久完成初始化。应用如果过早启动,经常会遇到:
- 数据库端口能连,但表还没准备好
- Redis 已经起了进程,但配置还没加载完
- 本地 mock 服务监听了端口,但种子数据还没写入
这时候光靠启动顺序远远不够。
健康检查的意义是给“可用”下定义
我比较推荐给关键依赖补上 healthcheck,至少让编排层知道:
- 服务是不是只是活着
- 服务是不是已经能响应关键探活请求
这样应用启动或重试时,就能基于更接近真实可用性的信号做判断。
本地依赖初始化最好显式化
如果项目需要先执行迁移、写测试数据、准备本地对象存储桶,我更建议把这些步骤做成明确的 bootstrap 过程,而不是把它们藏在 README 的一行备注里。
健康检查负责判断服务是否就绪,bootstrap 负责把依赖准备成“可开发状态”,这两件事最好分开。
卷挂载和初始化脚本也要考虑时机
很多本地环境问题都出在数据卷沿用了旧状态,结果容器虽然健康,但业务数据早就和代码版本不匹配。遇到这种情况,只重启应用通常没用,反而要回到依赖初始化流程重新整理。
所以我会把“保留数据卷”和“重置依赖”都写进日常工作流里。
小结
Docker Compose 的启动顺序只是第一步,真正决定本地环境是否可靠的,是健康检查和依赖初始化有没有被当成正式流程来设计。把这两层补齐,团队的本地启动成本会低很多。
