3

背景:我的 Docker 容器启动时间很长,很难预测什么时候启动。当健康检查开始时,它首先可能会显示“不健康”,因为启动有时还没有完成。这可能会导致我们的自动化工具重新启动或删除容器。

我的具体问题是我是否可以控制我的 Docker 容器,使其在设置准备好之前显示“正在启动”,并且之后可以以某种方式立即启动运行状况检查?或者关于如何使用健康检查以良好的方式处理状态还有其他建议吗?

附带问题:我很想了解在容器启动和健康检查启动期间如何进行和确定转换。我试过谷歌搜索如何确定 Docker(容器)状态,但我找不到任何好的参考。

4

1 回答 1

1

我的具体问题是我是否可以控制我的容器,使其在设置准备好之前显示“正在启动”,并且可以在此之后立即启动运行状况检查?

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

您确实可以配置 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 “单独”,虽然没有那么多可配置,但您可以使其与子命令的--health - start-period 参数一起工作:docker run

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

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

docker run --health-start-period=120s ...
于 2020-08-19T07:02:37.403 回答