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

10
我有一个.net 2.2核心控制台应用程序,作为HostedService永久在docker容器中运行。它不使用ASPNet.Core,也不是API,而是纯粹的.net-core应用程序。
启动时,它执行一系列的健康检查并开始运行。
我正在尝试编写一个cake build脚本,并在docker中部署和运行一些mocha集成测试。但是,集成步骤不会等待控制台应用程序完成其健康检查,从而导致集成失败。
我阅读过的所有健康检查指南都是针对API的。我没有API,也没有端点。如何让docker等待控制台应用程序准备就绪?
谢谢您的帮助!

尝试按照此处提到的方式实现健康检查服务(https://learn.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/monitor-app-health),但没有成功。 - RX100
1个回答

1
你可以使用 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将负责正确的顺序和适当的等待时间,以确保所有内容都能正确启动和设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接