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

Health Check command for docker(1.12) container (Not in Dockerfile!)

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,所以启动的容器有它。

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

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

谢谢

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

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

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

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

刚从 blog!. He refered Docker documentation HealthCheck 部分收到评论。 docker 命令对 "override" dockerfile 默认值进行了健康检查 "option"。我还没有检查!但是我得到我想要的似乎对我有好处。将检查并更新答案!

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

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

is there any way to Health Check from out side of the container and script also located outside.

Kind of a process that monitors the containers, if it is not good, it should roll-back to previous

您有多种选择:

  1. 从外部,您 运行 容器内的进程使用 docker exec 检查其运行状况。这可以是任何 shell 命令序列。如果你想把你的脚本放在容器之外,你可以使用像 cat script.sh | docker exec -it container sh -s.
  2. 这样的东西
  3. 您从容器外部检查容器健康状况,例如通过寻找应该在容器内 运行ning 的进程(尝试设置安全配置文件并使用 ps -Zax 或尝试寻找 children of the daemon),或者您可以为每个容器指定一个特定的带有 --user 12345 的用户 ID,然后查找那个或例如连接到它的服务。您必须确保它 运行 在正确的容器中。您可以在 /var/lib/docker/devicemapper/mnt/<hash>/rootfs.
  4. 下访问容器的文件系统
  5. 您 运行 在容器内放置一个 HEALTHCHECK 并使用 docker inspect --format='{{json .State.Health.Status}}' <containername> 结合例如检查其健康状况Dockerfile 中的一行: HEALTHCHECK CMD wget -q -s http://some.host 检查容器是否可以访问互联网。

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