docker(1.12)容器的运行状况检查命令(不在Dockerfile中!)

时间:2016-08-09 05:44:29

标签: docker health-monitoring

Docker版本1.12, 我从Here

获得Dockerfile
FROM nginx:latest

RUN touch /marker

ADD ./check_running.sh /check_running.sh
RUN chmod +x /check_running.sh

HEALTHCHECK --interval=5s --timeout=3s CMD ./check_running.sh

我能够使用check_running.sh shell脚本滚动更新和运行状况检查。在这里,check_running.sh脚本被复制到image,因此启动的容器具有它。

现在,我的问题是从容器和脚本的外侧还有任何方法进行健康检查。

我除了使用运行状况检查命令来获取容器性能(取决于我们在脚本中编写的内容),如果容器性能不佳,它应该回滚到以前的版本(种类的监视容器的进程,如果不好,它应该回滚到之前的

由于

5 个答案:

答案 0 :(得分:5)

  

有没有办法从容器外面进行健康检查   脚本也位于外面。

     

一种监控容器的过程,如果不好,它应该回滚到之前的

您有几种选择:

  1. 从外部,您在容器内运行一个进程,以使用docker exec检查其运行状况。这可以是任何shell命令序列。如果要将脚本保留在容器之外,可以使用cat script.sh | docker exec -it container sh -s
  2. 之类的内容
  3. 您从容器外部检查容器运行状况,例如通过查找应该在容器内运行的进程(尝试设置安全配置文件并使用ps -Zax或尝试查找children of the daemon),或者您可以为每个容器指定一个特定的用户ID {{ 1}}然后寻找那个或例如连接到它的服务。你必须确保它在正确的容器内运行。您可以访问--user 12345下面的容器文件系统。
  4. 您在容器内运行HEALTHCHECK并使用/var/lib/docker/devicemapper/mnt/<hash>/rootfs结合例如{{}}}检查其运行状况Dockerfile中的一行: docker inspect --format='{{json .State.Health.Status}}' <containername>检查容器是否可以访问互联网。
  5. 我建议选项3,因为它可能会在未来与其他工具更兼容。

答案 1 :(得分:2)

刚收到blog的评论!他提到了Docker文档HealthCheck部分。有健康检查&#34;选项&#34; for docker命令&#34;覆盖&#34; dockerfile默认值。我还没检查过!但对我来说,得到我想要的东西似乎很好。将检查并更新答案!

答案 2 :(得分:0)

这不适用于Dockerfile HEALTHCHECK选项,所有检查都在容器内运行。对我来说,这是一件好事,因为它避免了直接在主机上运行的潜在不受信任的代码,并且它允许您在容器中包含运行状况检查的依赖项。

如果您需要从外部监控您的容器,您需要使用其他工具或监控应用程序,其中有相当多的。

答案 3 :(得分:0)

您可以通过在容器上运行docker inspect来查看运行状况检查的结果。

取决于您的应用程序的另一种方法是公开健康检查也探测的/healthz端点,这样可以根据需要在外部或内部查询。

答案 4 :(得分:0)

Docker inspect命令允许您查看成功或失败的命令的输出

docker inspect --format='{{json .State.Health}}' your-container-name