docker - 如何在 docker 控制台应用程序中执行健康检查
问题描述
我有一个 .net 2.2 核心控制台应用程序,它作为 docker 容器中的 HostedService 永久运行。它没有使用 ASPNet.Core,也不是 API,它是一个纯 .net-core 应用程序。
启动时,它会执行一些健康检查以及何时开始运行。
我正在尝试编写一个蛋糕构建脚本并在 docker 中部署,并运行一些 mocha 集成测试。但是,集成步骤不会等待控制台应用程序完成其运行状况检查并且集成会失败。
我阅读的所有健康检查指南都是针对 API 的。我没有 API,也没有端点。如何让 docker 等待控制台应用程序准备好?
提前致谢
解决方案
您可以使用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 将处理正确的顺序和适当的等待时间,以使这些东西正确启动和设置。
推荐阅读
- python-3.x - Tensorflow 对象检测 API - 推理后如何读取 TFRecord?
- python - 输入到 CNN 的超像素
- c - 输入字符串由空终止字符组成
- slack - Slack conversations.list 方法没有列出所有频道
- firebase - 使用数据库时看不到 Firebase 的网络调用?
- java - 在 Java 中引用对象
- android - Kotlin CountDownTimer lateinit 属性尚未初始化且未找到 CoreComponentFactory
- elasticsearch - Elasticsearch,映射类型字符串不能包含启用的false 为什么?
- swift - UITABLE view sections with different prototype cells in each section
- php - COOKIE_DOMAIN 和 WP_CONTENT_URL 在 WP 站点中创建问题