如何将 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)
我正在尝试将 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)