Docker(1.12)容器的健康检查命令(不在Dockerfile!中)

docker版本1.12 ,我从这里得到了一个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 ,所以启动的容器具有它。

现在,我的问题是有没有办法从外面的健康检查容器和脚本也位于外面。

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

谢谢

有没有什么办法从外面的健康检查容器和脚本也位于外面。

监视容器的过程,如果不好,应该回滚到前一个

你有几个select:

  1. 从外面,你在容器中运行一个进程,用docker exec来检查它的健康状况。 这可以是任何shell命令的序列。 如果你想让你的脚本在容器外,你可以使用类似cat script.sh | docker exec -it container sh -s东西 cat script.sh | docker exec -it container sh -s
  2. 您可以从容器外部检查容器的健康状况,例如通过查找应该在容器内运行的进程(尝试设置安全configuration文件并使用ps -Zax或尝试查找守护进程的subprocess ),或者可以给每个进程用--user 12345容器存储一个特定的用户ID,然后寻找或者连接到它的服务。 你必须确保它在正确的容器内运行。 您可以访问/var/lib/docker/devicemapper/mnt/<hash>/rootfs下的容器文件系统。
  3. 你在容器中运行一个HEALTHCHECK ,并用docker docker inspect --format='{{json .State.Health.Status}}' <containername>检查它的健康状况,例如在Dockerfile中结合一行: HEALTHCHECK CMD wget -q -s http://google.com检查容器是否可以上网。

我build议选项3,因为它将来可能与其他工具更兼容。

刚刚从博客发表评论! 他提到了Docker文档HealthCheck部分。 docker命令有一个运行状况检查“选项”来“覆盖”dockerfile默认值。 我还没有检查! 但对我来说,得到我想要的东西似乎是件好事。 将检查并更新答案!

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

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

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

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

Docker inspect命令可以让您查看成功或失败的命令的输出

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