不健康的Docker容器未通过Docker本机运行状况检查重新启动

时间:2019-08-17 09:54:42

标签: docker dockerfile docker-engine

我已经通过在Docker文件中添加HEALTHCHECK命令实现了Docker本机运行状况检查,如下所示,

HEALTHCHECK --interval=60s --timeout=15s --retries=3 CMD ["/svc/app/healthcheck/healthCheck.sh"]

设置容器的入口点

CMD [".././run.sh"] 

执行如下所示的docker run命令,

docker run -d  --net=host --pid=host --publish-all=true -p 7000:7000/udp applicationname:temp

healthCheck.sh从1退出,当我的应用程序未启动,并且我可以看到容器状态为不正常,但是它没有重新启动时。

STATUS

Up 45 minutes (unhealthy)

以下是docker和操作系统的详细信息:

[root@localhost log]# docker -v
Docker version 18.09.7, build 2d0083d

操作系统版本

NAME="CentOS Linux"
VERSION="7 (Core)"

如何在容器不正常时自动重启?

2 个答案:

答案 0 :(得分:2)

Docker仅报告运行状况检查的状态。对运行状况检查结果采取行动需要在Docker之上运行一个额外的层。 Swarm模式提供了此功能,并且随Docker引擎一起提供。要启用:

docker swarm init

然后,您可以使用docker rundocker service命令声明目标状态,而不用docker stack管理单个容器,而swarm模式将管理这些容器以实现目标状态。

docker service create -d  --net=host applicationname:temp

请注意,主机网络端口和发布端口不兼容(它们在一起没有逻辑意义),net需要两个破折号作为有效标志,并且在群集模式下不支持更改pid名称空间。许多其他功能应类似于docker run

https://docs.docker.com/engine/reference/commandline/service_create/

答案 1 :(得分:1)

当前没有针对不正常运行的容器的自动重启机制,请参见this,但您可以按照here所述进行解决:

docker run -d \
    --name autoheal \
    --restart=always \
    -e AUTOHEAL_CONTAINER_LABEL=all \
    -v /var/run/docker.sock:/var/run/docker.sock \
    willfarrell/autoheal

它将docker unix域套接字添加到监视容器,然后它可以监视所有不健康的容器,如果其他容器不健康,则可以为您重新启动它。