FAQ DockerCompose启动顺序与健康检查

5 阅读1分钟

Skeyevss FAQ:Docker Compose 启动顺序与健康检查

试用安装包下载 | SMS | 在线演示

项目地址github.com/openskeye/g…


1. 问题现象

docker compose up 后部分容器反复重启;业务日志报数据库连接失败、etcd 未就绪;或第一次启动正常,机器重启后必现故障。


2. 依赖顺序的本质

微服务启动时若 早于 MySQL/Redis/etcd 开始建连,会在重试耗尽后退出。Compose v2 的 depends_on 默认只保证 容器启动顺序,不保证 进程已监听端口


3. 推荐做法

  • 在依赖服务上配置 healthcheck(例如 MySQL mysqladmin ping、Redis redis-cli ping、etcd etcdctl endpoint health);
  • 业务服务 depends_on 使用 condition: service_healthy(语法以当前 Compose 文件版本为准);
  • 应用侧保留 指数退避重试,防止依赖短暂抖动导致雪崩。

4. 环境变量与挂载

  • .env 是否通过 env_fileenvironment 注入到每个服务;
  • 配置文件目录 etc/ 是否挂载一致,避免容器内路径与文档描述不符;
  • 数据卷权限:非 root 用户进程可能无法写 SQLite 或日志目录。

5. 排障命令习惯

  • docker compose ps 看状态与退出码;
  • docker compose logs <service> --tail 200 看启动失败栈;
  • 进入容器 nc -zv host port 测连通性。

启动问题多数是 「依赖未就绪」与「配置未注入」 两类,按日志时间线从上到下读一遍通常即可定性。