如何在 docker 控制台应用程序中执行健康检查

Nic*_*ick 10 docker cakebuild .net-core-2.2

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

启动时,它会执行许多健康检查,并在开始运行时执行。

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

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

提前致谢

Yan*_*nko 1

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

您可以healthcheck向应用程序服务定义添加一个块:

myapp:
  image: ...
  healthcheck:
    test:
      ["CMD", "somescript.sh", "--someswitch", "someparam"]
    interval: 30s
    timeout: 10s
    retries: 4
Run Code Online (Sandbox Code Playgroud)

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

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

wait-for-app-setup:
  image: ...
  depends_on:
    myapp:
      condition: service_healthy
Run Code Online (Sandbox Code Playgroud)

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