🎨
Docker
  • Docker入门
  • Docker overview
    • 隔离与限制
    • copy-on-write(CoW: 写时复制)
    • docker中的联合文件系统
    • Docker存储
      • tmpfs mounts
      • volume
      • bind mounts
    • Docker网络
      • host模式
      • bridge模式
        • default bridge模式
        • User-defined bridge模式
      • none模式
      • container模式
  • 容器监控方式
    • prometheus + grafana+cAdvisor监控容器
  • Dockerfile指令
    • Usage
    • BuildKit
    • Format
    • Parser directives
      • syntax
      • escape
    • Environment replacement
    • FROM
      • 了解ARG和FROM之间的交互方式
    • .dockerignore file
    • RUN
    • CMD
    • COPY
    • ADD
    • ENV
    • WORKDIR
    • ARG
      • Impact on build caching(对构建缓存的影响)
      • Default(默认值)
      • Scope(作用域)
      • Using ARG Variables(使用ARG变量)
      • Predefined ARGS(预先定义好的ARG变量)
      • Automatic platform ARGs in the global scope(全局作用域中自动化平台的ARGS)
    • STOPSIGNAL
    • HEALTHCHECK
    • SHELL
    • ONBUILD
    • Dockerfile示例
    • LABEL
    • MAINTAINER (deprecated)
    • EXPOSE
    • ENTRYPOINT
      • Shell形式的ENTRYPOINT示例
      • 理解CMD和ENTRYPOINT是如何交互的
    • VOLUME
    • USER
  • docker-compose.yaml文件中常用指令
    • compose文件结构和示例
    • 服务配置参考
      • build
        • dockerfile
        • context
        • shm_size
        • network
        • labels
        • cache_from
        • args
        • target
      • cap_add, cap_drop
      • cgroup_parent
      • command
      • configs
        • 短语法形式
        • 长语法形式
      • container_name
      • credential_spec
        • EXAMPLE GMSA CONFIGURATION
      • depends_on
      • deploy
        • endpoint_mode
        • labels
        • mode
        • placement
        • max_replicas_per_node
        • replicas
        • resource
        • restart_policy
        • rollback_config
        • Update_config
        • Not supported for docker stack deploy
      • devices
      • dns
      • dns_search
      • entrypoint
      • env_file
      • environment
      • expose
      • external_links
      • extra_hosts
      • healthcheck
      • image
      • init
      • isolation
      • labels
      • links
      • logging
      • network_mode
      • networks
        • alias
        • IPV4_ADDRESS, IPV6_ADDRESS
      • pid
      • ports
        • 长语法
        • 短语法
      • profiles
      • restart
      • secrets
        • 长语法
        • 短语法
      • security_opt
      • stop_grace_period
      • stop_signal
      • sysctls
      • tmpfs
      • ulimits
      • userns_mode
      • volumes
        • 长语法
        • 短语法
        • VOLUMES FOR SERVICES, SWARMS, AND STACK FILES
      • domainname, hostname, ipc, mac_address, privileged, read_only, shm_size, stdin_open, tty, user, work
      • Specifying durations
      • Specifying byte values
      • Volume configuration reference
        • driver
        • driver_opts
        • external
        • labels
        • name
      • Network configuration reference
        • name
        • external
        • labels
        • internal
        • ipam
        • enable_ipv6
        • driver
          • overlay
          • bridge
          • host或者none
        • driver_opts
        • attachable
      • configs configuration reference
      • secrets configuration reference
      • Variable substitution
      • Extension fields
  • docker-compose示例
    • WordPress
    • PostgreSQL
    • Django和PostgreSQL
    • Rails和PostgreSQL
  • Dockerfile最佳实践
Powered by GitBook
On this page

Was this helpful?

  1. Dockerfile指令

HEALTHCHECK

HEALTHCHECK指令有两种形式:

  • HEALTHCHECK [OPTIONS] CMD command(通过在容器内部运行一个命令来检查容器的健康)

  • HEALTHCHECK NONE(关闭任何从基础镜像中继承而来的健康检查(healthcheck)。

HEALTHCHECK指令告诉Docker如何测试一个容器来检查它是否依然在正常工作。这个功能能够在一些场景中使用,例如:一个web服务器陷入了一个无限循环而无法正常处理新的连接,尽管服务器进程依然在运行。

当容器指定了一个健康检查时,除了它自身的正常状态,它还会有一个健康状态。这个状态最初是starting状态。任何时候一个健康检查通过以后,它会变成healthy状态(不论它之前是什么状态)。

在连续多次失败后,它的状态会变为unhealthy。

在CMD之前可以使用下面的选项:

  • --interval=DURATION (default: 30s)

  • --timeout=DURATION (default: 30s)

  • --start-period=DURATION (default: 0s)

  • --retries=N(default: 3)

健康检查在容器启动后会首先按照设定的间隔时间(interval)执行,然后在每次检查完成后再次按照设定的间隔时间(interval)运行。

如果单次检查的运行时间超过超时(timeout)秒数,则认为检查失败 。

如果一个容器连续的重复(retries)检查都失败,那么容器会被认为是不健康的(unhealthy)。

启动时间段(Start period)为需要一定时间才能完全启动的容器提供了初始化的时间。在此期间,探测故障将不计入最大重试(retries)次数。但是,如果健康检查在容器启动期间探测成功,则会认为容器已经启动。此时,探测的连续失败将被计入最大重试(retries)次数 。

在Dockerfile中只能有一个HEALTHCHECK指令。如果Dockerfile中列出了多个,则只有最后一个HEALTHCHECK会生效 。

CMD关键字之后的命令既可以是shell命令(例如HEALTHCHECK CMD /bin/check-running)也可以是一个exec数组(与其他Dockerfile命令一样;详情请参阅ENTRYPOINT)。

命令的退出状态码表明了容器的健康状态。可能的值有以下这些:

  • 0::成功(success) - 容器是健康的并且已经准备好被使用。

  • 1:不健康(unhealthy)- 容器没有正常工作。

  • 2:预留的值(reserved)- 暂时不使用这个退出状态码。

例如,每五分钟左右检查一次,以便Web服务器能够在三秒内为网站的主页提供服务:

HEALTHCHECK --interval=5m --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

为了有助于诊断失败的探测,命令执行时写入到Stdout或Stderr中的任何输出文本信息 (UTF-8 编码) 都将存储在健康状况中,并且可以通过docker inspect查询。此类输出应保持简短(当前只能存储4096个字节大小的信息)。

当一个容器的健康状态更改以后,会通过新的状态生成一个health_status事件。

HEALTCHECK特性在Docker1.12版本被添加。

PreviousSTOPSIGNALNextSHELL

Last updated 4 years ago

Was this helpful?