我怎样才能让容器从一开始就变得健康

问题描述

背景:我的Docker容器的启动时间很长,很难预测何时完成。并且当运行状况检查开始时,由于启动有时没有完成,因此它首先可能显示“不正常”。这可能会导致重启或从我们的自动化工具中删除容器。

我的具体问题是,是否可以控制Docker容器,使其在安装完成前显示“正在启动”,然后可以以某种方式立即开始运行状况检查?还是有其他关于如何使用运行状况检查以良好方式处理状态的建议?

侧面问题:我很想参考一下在容器启动和运行状况检查启动期间如何进行转换和确定转换。我尝试使用谷歌搜索方法来确定Docker(容器)状态,但是找不到任何好的参考资料。

解决方法

我的具体问题是我是否可以控制我的容器,以便显示 “开始”直到设置完成并且可以进行健康检查 之后立即以某种方式开始?

我认为仅K8或Docker是不可能的。
容器并非旨在与Docker Daemon或Kubernetes通信以告知其内部设置已完成。
如果应用程序需要花费一些时间来设置,则可以使用Kubernetes的“就绪性”和“活动性”探针选项。

You may indeed configure readynessProbe在特定的延迟后执行初始检查。
例如,将120秒指定为初始延迟:

readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 120

livenessProbe相同:

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
    httpHeaders:
    - name: Custom-Header
      value: Awesome
  initialDelaySeconds: 120
  periodSeconds: 3

对于Docker“单独”而言,虽然没有太多可配置性,但您可以使其与docker run子命令的--health-start-period parameter一起使用:

-health-start-period:容器初始化的开始时间 开始健康重试倒计时之前

例如,您可以指定一个重要的值,例如:

docker run --health-start-period=120s ...