繁体   English   中英

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

[英]Health Check command for docker(1.12) container (Not in 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 ,所以启动的容器有它。

现在,我的问题是有什么方法可以从容器外部进行健康检查,脚本也位于外部。

我正在排除一个健康检查命令来获取容器性能(取决于我们在脚本中编写的内容),如果容器性能不佳,它应该回滚到以前的版本(一种监视容器的过程,如果它不好,应该回滚到以前的

谢谢

有什么方法可以从容器外部进行健康检查,脚本也位于外部。

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

您有多种选择:

  1. 从外部,您在容器内运行一个进程,以使用 docker exec 检查其运行状况。 这可以是任何 shell 命令序列。 如果你想将你的脚本保存在容器之外,你可以使用类似cat script.sh | docker exec -it container sh -s东西cat script.sh | docker exec -it container sh -s cat script.sh | docker exec -it container sh -s
  2. 您从容器外部检查容器健康状况,例如通过查找应该在容器内部运行的进程(尝试设置安全配置文件并使用ps -Zax或尝试查找守护进程的子进程),或者您可以给每个使用--user 12345将特定用户 ID 容器化,然后查找该用户 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://some.host检查容器是否可以访问互联网。

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

刚刚从博客上收到评论! 他参考了 Docker 文档HealthCheck部分。 有一个健康检查“选项”为docker命令“覆盖”的dockerfile默认值。 我还没有检查!。 但是得到我想要的东西对我来说似乎很好。 将检查并更新答案!

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM