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
,因此启动的容器具有它。
现在,我的问题是从容器和脚本的外侧还有任何方法进行健康检查。
我除了使用运行状况检查命令来获取容器性能(取决于我们在脚本中编写的内容),如果容器性能不佳,它应该回滚到以前的版本(种类的监视容器的进程,如果不好,它应该回滚到之前的)
由于
答案 0 :(得分:5)
有没有办法从容器外面进行健康检查 脚本也位于外面。
一种监控容器的过程,如果不好,它应该回滚到之前的
您有几种选择:
cat script.sh | docker exec -it container sh -s
。ps -Zax
或尝试查找children of the daemon),或者您可以为每个容器指定一个特定的用户ID {{ 1}}然后寻找那个或例如连接到它的服务。你必须确保它在正确的容器内运行。您可以访问--user 12345
下面的容器文件系统。/var/lib/docker/devicemapper/mnt/<hash>/rootfs
结合例如{{}}}检查其运行状况Dockerfile中的一行:
docker inspect --format='{{json .State.Health.Status}}' <containername>
检查容器是否可以访问互联网。我建议选项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