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