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

Vee*_*dra 6 health-monitoring docker

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
Run Code Online (Sandbox Code Playgroud)

我能够使用check_running.shshell脚本滚动更新和运行状况检查.这里,check_running.sh脚本被复制到image,因此启动的容器具有它.

现在,我的问题是从容器和脚本的外侧还有任何方法进行健康检查.

我除了使用运行状况检查命令来获取容器性能(取决于我们在脚本中写的内容),如果容器性能不好,它应该回滚到以前的版本(监视容器的进程类型,如果它不好,它应该回滚到以前)

谢谢

Dej*_*Dej 5

有什么方法可以从同样位于外部的容器和脚本的外部进行运行状况检查。

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

您有几种选择:

  1. 从外部,您可以在容器内部运行一个进程,以使用docker exec检查其运行状况。这可以是任何顺序的Shell命令。如果要将脚本保留在容器之外,则可以使用cat script.sh | docker exec -it container sh -s
  2. 您可以从容器外部检查容器的运行状况,例如通过查找应该在容器内部运行的进程(尝试设置安全配置文件并使用ps -Zax或尝试寻找守护程序的子代),也可以为每个容器指定一个特定的容器用户ID,--user 12345然后寻找该ID,例如连接到其服务。您必须确保它在正确的容器中运行。您可以在下面访问容器的文件系统/var/lib/docker/devicemapper/mnt/<hash>/rootfs
  3. 您在容器内运行HEALTHCHECKdocker inspect --format='{{json .State.Health.Status}}' <containername>结合Dockerfile中的一行检查其运行状况: HEALTHCHECK CMD wget -q -s http://google.com检查容器是否可以访问互联网。

我建议使用选项3,因为将来它可能会与其他工具更加兼容。