容器的健康检测 如果在Dockerfile或者docker run命令里进行了健康检测,容器启动后查看状态会多出一个信息:healthy或者unhealthy。
1 2 3 # docker ps ... STATUS ... Up 19 minutes (healthy)
在Dockerfile里配置健康检测 Dockerfile 1 HEALTHCHECK --interval=10s --timeout =2s --start-period=30s --retries=3 CMD curl --silent --fail http://localhost:7015/actuator/health || exit 1
在容器启动时指定健康检测参数 1 2 3 4 5 6 7 8 docker run ... --health-interval=10s \ --health-timeout=2s \ --health-start-period=30s \ --health-retries=3 \ --health-cmd="curl --silent --fail http://localhost:7017/actuator/health || exit 1" \ --restart on-failure \ ...
自动重启unhealthy的容器 参考Github项目: Autoheal 大致是说本来docker run
有一个issue,或者说应该有那么一个功能,参数--exit-on-unhealthy
,默认值true
,在容器unhealthy时就退出。再配合--restart=on-failure
,来实现容器的自动重启。在exit-on-unhealthy
没实现之前,就用这个Autoheal来实现这个功能。
1 2 3 4 5 6 docker run -d \ --name autoheal \ --restart=unless-stopped \ -e AUTOHEAL_CONTAINER_LABEL=all \ -v /var/run/docker.sock:/var/run/docker.sock \ willfarrell/autoheal
AUTOHEAL_CONTAINER_LABEL的默认值是autoheal,表示Autoheal会监视带有标签--label autoheal=true
的容器。
设置AUTOHEAL_CONTAINER_LABEL=all则是监视所有正在运行的容器。
也可以自定义AUTOHEAL_CONTAINER_LABEL的值,比如AUTOHEAL_CONTAINER_LABEL=myapp
,这会监视所有带myapp=true
标签的容器。(说实话,官方的这句Set ENV AUTOHEAL_CONTAINER_LABEL to existing label name that has the value true.
,最初让我懵了一下。)