首页 > 资讯 > dockerfile健康检查HEALTHCHECK的命令学习

dockerfile健康检查HEALTHCHECK的命令学习

HEALTHCHECK 指令告诉 Docker 如何测试一个容器,以检查它是否仍在工作,本文主要介绍了dockerfile健康检查HEALTHCHECK的命令学习,感兴趣的可以了解一下

语法形式:

HEALTHCHECK [OPTIONS] CMD command (通过在容器中运行一个命令执行健康检查)HEALTHCHECK NONE (禁用从基本镜像继承的任何健康检查)

1、dockerfile示例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

FROM registry.access.redhat.com/ubi9/ubi-init

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

RUN dnf -y install wget tcpdump tzdata bind-utils;dnf clean all;dnf makecache

ADD ./jdk-8u212-linux-x64.tar.gz /usr/local/

ADD ./apache-tomcat-8.0.26.tar.gz /usr/local/

ADD ./node_exporter /usr/bin/

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone;ln -sf /usr/local/jdk1.8.0_212/bin/java /usr/bin/java

RUN echo "sh /usr/local/apache-tomcat-8.0.26/bin/startup.sh" >> /etc/profile

WORKDIR /data

ADD ./run_tomcat_exporter.sh /data/run_tomcat_exporter.sh

EXPOSE 9100 8080

ENV JAVA_HOME /usr/local/jdk1.8.0_212

ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV CATALINA_HOME /usr/local/apache-tomcat-8.0.26

ENV CATALINA_BASH /usr/local/apache-tomcat-8.0.26

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

ENV girl="serena" EXPORTER_PORT=9100

HEALTHCHECK --interval=5s --timeout=3s --retries=3 CMD curl --fail http://localhost:$EXPORTER_PORT || bash -c 'kill -s 15 -1 && (sleep 10; kill -s 9 -1)'

CMD sh /data/run_tomcat_exporter.sh

注:这个示例中跑了 exporter 9100 和tomcat 8080。使用脚本/data/run_tomcat_exporter.sh 一次性启动这两个应用。

2、启动脚本

1

2

3

4

5

#!/usr/bin/env bash

sh /usr/local/apache-tomcat-8.0.26/bin/startup.sh

/usr/bin/node_exporter

sleep 36000000

3、构建镜像

1

docker build -t myubi:1.0 .

4、运行容器

1

docker run -d --restart=always --name=myubi -p 19100:9100 -p 18080:8080 myubi:1.0

 注:可使用宿主机访问容器应用,如http://宿主机ip:18080/ 和 http://宿主机ip:19100/metrics

5、进容器内部尝试kill掉健康检查的exporter进程

1

2

3

4

5

6

7

8

9

10

11

12

[root@k8s-node2 ubi]

sh-5.1

sh-5.1

UID         PID   PPID  C STIME TTY          TIME CMD

root          1      0  0 09:58 ?        00:00:00 sh /data/run_tomcat_exporter.sh

root         14      1  7 09:58 ?        00:00:01 /usr/local/jdk1.8.0_212/bin/java -Djava.util.logging.config.file=/usr/local/apache-tomcat-8.0.26/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.Cla

root         15      1  0 09:58 ?        00:00:00 /usr/bin/node_exporter

root         67      0  0 09:58 pts/0    00:00:00 sh

root         82     67  0 09:58 pts/0    00:00:00 ps -ef

sh-5.1

sh-5.1

sh-5.1

6、小结

6-1、健康检查中使用exit 1只能让容器的状态为 unhealthy

HEALTHCHECK --interval=5s --timeout=3s --retries=3 CMD curl --fail http://localhost:$EXPORTER_PORT || exit 1

6-2、健康检查中使用bash -c 'kill -s 15 -1 && (sleep 10; kill -s 9 -1)' 能让容器重启

HEALTHCHECK --interval=5s --timeout=3s --retries=3 CMD curl --fail http://localhost:$EXPORTER_PORT || bash -c 'kill -s 15 -1 && (sleep 10; kill -s 9 -1)'

因为kill -s 9 -1 就是杀掉容器的主进程1。如果主进程1不存在了,那么容器也就挂了。

配合运行容器的命令--restart=always 则容器检测到主进程1不存在了就回重启容器。

到此这篇关于dockerfile健康检查HEALTHCHECK的命令学习的文章就介绍到这了,更多相关dockerfile健康检查HEALTHCHECK内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

原文链接:https://laoxiao.blog.csdn.net/article/details/131954192

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关知识

使用 docker 部署 AspNetCore 应用:使用alpine镜像并加入健康检查和瘦身
健康检查 检测java假死
Docker镜像瘦身技巧的新思路(基于chiselled Ubuntu)本文介绍一种docker image瘦身的技巧
ASP.NET Core 中的健康狀態檢查
Docker安全性:最佳实践和常见安全考虑
211健康检查计划提供积极的心理健康支持
k8s健康检查 spring k8s健康检查探针多个地址
检查 Windows 磁盘健康状态
如何为托管到SAE的应用配置健康检查
男科健康检查让女医生检查,你愿意吗?

网址: dockerfile健康检查HEALTHCHECK的命令学习 https://m.trfsz.com/newsview905355.html