docker-compose服务间依赖通过自定义健康检查实现顺序启动
Docker Compose中的condition: service_healthy
配置是用来判断依赖的服务是否健康的。当一个服务依赖于另一个服务时,可以使用depends_on
和condition: service_healthy
来确保依赖的服务已经健康启动。
下面是关于如何判断服务是否健康的一些相关内容:
-
健康检查命令:在Dockerfile或docker container run命令中,可以使用
HEALTHCHECK
来定义容器的健康检查命令[1]。健康检查命令可以是任何能够返回0或非0退出代码的命令,例如使用curl
命令检查服务是否可访问。 -
健康检查参数:健康检查命令可以使用一些参数来配置检查的间隔、超时和重试次数等。常用的健康检查参数包括:
--interval
:指定检查的间隔时间,默认为30秒。--timeout
:指定每次检查的超时时间,默认为30秒。--retries
:指定连续失败的次数后将服务标记为不健康,默认为3次。--start-period
:指定容器启动后等待健康检查开始的时间,默认为0秒。
-
condition: service_healthy
配置:在Docker Compose中,可以使用condition: service_healthy
来指定依赖的服务是否健康。当依赖的服务的健康状态为健康时,才会启动当前的服务。这样可以确保依赖的服务已经成功启动并且可用。
下面是一个示例的docker-compose.yml文件,演示了如何使用健康检查和condition: service_healthy
来判断服务是否健康并依次启动:
version: "3.8"
services:
flask:
build:
context: ./flask
dockerfile: Dockerfile
image: flask-demo:latest
environment:
- REDIS_HOST=redis-server
- REDIS_PASS=${REDIS_PASSWORD}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000"]
interval: 30s
timeout: 3s
retries: 3
start_period: 40s
depends_on:
redis-server:
condition: service_healthy
networks:
- backend
- frontend
redis-server:
image: redis
在上述示例中,flask服务依赖于redis-server服务。flask服务的健康检查命令是使用curl
命令检查http://localhost:5000
是否可访问。只有当redis-server服务的健康状态为健康时,flask服务才会启动。
Learn more:
- 【Docker系列】Docker Compose 服务依赖和健康检查_docker-compose healthcheck-CSDN博客
- [docker]-docker-compose通过healthcheck判断容器状态并依次启动_docker-compose healthcheck-CSDN博客
- Docker compose 服务依赖关系及健康检查 - 掘金