【问题标题】:How can i get my container to go from starting -> healthy我怎样才能让我的容器从开始 -> 健康
【发布时间】:2020-08-19 05:15:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: docker status health-check


    【解决方案1】:

    我的具体问题是我是否可以控制我的容器以使其显示 'starting' 直到设置准备好并且运行状况检查可以 不知何故在那之后立即开始?

    我认为仅使用 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 : 容器初始化的开始时间 在开始健康重试倒计时之前

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

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

    【讨论】:

    • 对不起。我刚刚意识到 k8s 和 docker status 有很大的不同。我专门寻找 Docker 的状态。我会更新这个问题。很抱歉造成混乱。
    • 没关系。我用 Docker 方式进行了编辑。但正如一开始所说,你没有直接的方法来实现你想要的。一般来说,容器的设计不是为了在重要延迟后保持健康。我认为对于这些极端情况,我们需要使用提供的选项来指定健康检查的开始时间
    • 我怀疑但希望有一些未知的隐藏英雄功能。 :D
    • ...喜欢玩 PIDs
    • 事实上,英雄功能并不是一个好的礼物,因为容器内的应用程序与 docker 编排器的强耦合增加了很多复杂性。因为我不是超级聪明,所以我一直在寻找 KISS(保持简单,愚蠢):)
    猜你喜欢
    • 2016-05-30
    • 2019-06-02
    • 1970-01-01
    • 2021-03-17
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    相关资源
    最近更新 更多