如何将Healthcheck与docker swarm集成?

时间:2019-08-13 08:19:28

标签: docker 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返回值。但是在每种情况下,泊坞窗都无法理解我的健康API的响应。容器的行为完全取决于我在测试标签的退出代码中提到的任何值,如果我将exit 0容器设置为始终健康,或者将set exit 1容器设置为不健康。

运行状况检查如何理解我的自定义API响应? 例:如果我的自定义API返回500或1,则healthcheck应该认为这是错误的,需要将容器标记为不健康。

有人可以帮助我了解如何在docker-swarm中使用运行状况检查吗?

1 个答案:

答案 0 :(得分:1)

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

进行调用
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)