我怎样才能让我的容器从开始->健康

How can i get my container to go from starting -> healthy

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

我的具体问题是,我是否可以控制我的 Docker 容器,使其显示 'starting' 直到设置准备就绪,然后可以以某种方式立即开始运行状况检查?或者对于如何使用健康检查以良好的方式处理状态有任何其他建议吗?

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

My specific question is if I can control my container so that it shows 'starting' until the setup is ready and that the health check can somehow be started immediately after that?

我认为仅使用 K8s 或 Docker 是不可能的。
容器并非旨在与 Docker 守护进程或 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 : Start period for the container to initialize before starting health-retries countdown

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

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