如何将 healthcheck 与 docker swarm 集成?

How to integrate healthcheck with docker swarm?

我正在尝试将 healthcheck 与 docker swarm 集成。我已经创建了自己的自定义健康检查 API 来监控容器的健康状况。 我在 yaml 文件中使用以下标签进行健康检查:

healthcheck:
      test: curl -X GET -sf https://${HOSTNAME}:port/module_name/health || exit 0
      interval: 30s
      timeout: 3s
      retries: 25 

我在这里尝试了不同的 API 响应,例如 json 对象、200 响应、500 响应也尝试了 0 和 1 返回值。但在每种情况下 docker 都无法理解我的健康 API 的反应。容器的行为完全取决于我在测试标记的退出代码中提到的任何值,如果我设置 exit 0 容器总是健康的,或者如果设置 exit 1 容器总是不健康的。

健康检查如何理解我的自定义 API 响应? 例如:如果我的自定义 API returns 500 或 1 那么健康检查应该认为这是错误的并且需要将容器标记为不健康。

任何人都可以帮助我了解如何使用 docker-swarm 进行健康检查吗?

可以在脚本中包含所有内容并使用

调用它
healthcheck:
    test: ["CMD", "python", "/path/script.py" , "YOUR_HOSTNAME" ]

示例脚本:

import requests
import sys

if len(sys.argv) < 2:
     print("Please supply the hostname")
     sys.exit(1)

hostname = sys.argv[1]
url = "http://%s/healthcheck" % hostname
try:
    get_url = requests.get(url)
    response = get_url.text
    if response == "1":
        print("expect to get 0 but get 1 with response code %s" % get_url.status_code)
        sys.exit(1)
except Exception as e:
    print(str(e))
    sys.exit(1)