我有一个.net 2.2核心控制台应用程序,它作为Docker容器中的HostedService永久运行。它不使用ASPNet.Core,也不是API,而是纯.net核心应用程序。
启动后,它将执行许多运行状况检查,并开始运行。
我正在尝试编写一个cake build脚本并在docker中部署,并运行一些摩卡集成测试。但是,集成步骤不会等待控制台应用程序完成运行状况检查,并且集成失败。
我阅读的所有运行状况检查指南均针对API。我没有API,也没有端点。如何让docker等待控制台应用就绪?
预先感谢
答案 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 将处理正确的顺序和适当的等待时间,以便正确启动和设置内容。