首页 > 解决方案 > 如何在 docker 控制台应用程序中执行健康检查

问题描述

我有一个 .net 2.2 核心控制台应用程序,它作为 docker 容器中的 HostedService 永久运行。它没有使用 ASPNet.Core,也不是 API,它是一个纯 .net-core 应用程序。

启动时,它会执行一些健康检查以及何时开始运行。

我正在尝试编写一个蛋糕构建脚本并在 docker 中部署,并运行一些 mocha 集成测试。但是,集成步骤不会等待控制台应用程序完成其运行状况检查并且集成会失败。

我阅读的所有健康检查指南都是针对 API 的。我没有 API,也没有端点。如何让 docker 等待控制台应用程序准备好?

提前致谢

标签: dockercakebuild.net-core-2.2

解决方案


您可以使用docker-compose 工具,特别是它的healthcheck选项,以等待容器启动并在继续进行集成测试之前完成其设置工作。

healthcheck您可以在应用服务定义中添加一个块:

myapp:
  image: ...
  healthcheck:
    test:
      ["CMD", "somescript.sh", "--someswitch", "someparam"]
    interval: 30s
    timeout: 10s
    retries: 4

您在属性中指定的命令test应验证应用程序的设置工作是否已完全完成。它可以是一些自定义脚本,myapp只是为了进行健康检查而添加到容器中。

现在,您可以添加一些虚假服务 - 只是为了检查应用服务是否健康。根据您的特定情况,可以将此责任交给具有集成测试的容器。无论如何,这个其他服务应该有一个depends_on并在其中提到应用程序服务:

wait-for-app-setup:
  image: ...
  depends_on:
    myapp:
      condition: service_healthy

因此,docker-compose 将处理正确的顺序和适当的等待时间,以使这些东西正确启动和设置。


推荐阅读