村长,好久不见,村长都解决不了的问题,坐下来围观学习。
docker用的哪个版本?是docker swarm mode?
Docker version 17.12.1-ce, build 7390fc6
,是的,swarm mode
村长我又来了,docker swarm mode中使用docker service create --health命令可以监控容器的状态,如果unhealth,就会重启新容器来代替旧容器。以下是--health的参数声明,完美适用你的场景
--health-cmd string Command to run to check health
--health-interval duration Time between running the check (ms|s|m|h)
--health-retries int Consecutive failures needed to report unhealthy
--health-start-period duration Start period for the container to initialize before counting retries towards unstable (ms|s|m|h)
--health-timeout duration Maximum time to allow one check to run (ms|s|m|h)
这个与 Dockerfile 中的 HEALTHCHECK 是同一个
@dudu: 在Swarm模式下,Swarm manager会监控服务task的健康状态,如果容器进入 unhealthy 状态,它会停止容器并且重新启动一个新容器来取代它。这个过程中会自动更新服务的 load balancer (routing mesh) 后端或者 DNS记录,可以保障服务的可用性。
@dudu: 对比dockerfile里面的healthcheck,还是有区分的,功能性比较好,dockerfile里的health只能返回值
health check一般都是应用程序级的,因为health check比较复杂,比如数据库依赖,如果数据库down掉,这个服务就是不可用了,eShopOnContainers中有关于Health check的示例,个人觉得很好