如何在Docker控制台应用程序中执行运行状况检查

时间:2019-04-18 09:32:04

标签: docker cakebuild .net-core-2.2

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

启动后,它将执行许多运行状况检查,并开始运行。

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

我阅读的所有运行状况检查指南均针对API。我没有API,也没有端点。如何让docker等待控制台应用就绪?

预先感谢

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

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