不健康的Docker容器未被Docker原生健康检查重启。

5
我已通过在 Dockerfile 中添加 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)"

如何在容器出现故障时自动重启它?

您的 docker run 命令似乎无效。net 选项需要是 --net 而不是 -net,而主机网络与发布端口不兼容。 - BMitch
2个回答

4

目前没有针对不健康容器的自动重启机制,参见此处。但您可以按照这里所述的方法进行解决。

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域套接字添加到监视容器中,然后它可以监控所有不健康的容器,并在其他容器不健康时为您重新启动。


4

Docker仅报告健康检查的状态。对健康检查结果的操作需要在docker之上运行额外的层。Swarm模式提供了这个功能,并随docker引擎一起提供。要启用:

docker swarm init

使用Docker服务或堆栈命令声明目标状态,而不是使用docker run管理单个容器,Swarm模式将管理容器以实现目标状态。

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

请注意,主机网络和发布端口不兼容(它们在逻辑上没有任何意义),net需要两个破折号才能成为有效标志,并且在集群模式下不支持更改pid名称空间。许多其他功能应类似于docker runhttps://docs.docker.com/engine/reference/commandline/service_create/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接