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