目前我正在尝试检查在 docker 容器内运行的网络服务是否健康以及它的 HTTP 状态代码是否为 200。
但是内置在 healthcheck 中的 docker 只检查退出代码。
我正在通过终端运行这个命令:
curl -o /dev/null -s -w "%{http_code}\n" http://localhost:8080/api/health
并检查返回的状态码是否为200。 我怎样才能将这个嵌入到 docker healthcheck 中?
最佳答案
您可以使用 HEALTHCHECK
仅检查命令的退出代码值的事实,如下所示:
- 使用
curl
中的-w
和-s
选项只输出api请求的http状态码 - 使用 bash 测试表达式检查状态码
Dockerfile 中的 HEALTHCHECK
可能如下所示:
HEALTHCHECK --interval=20s --retries=2 CMD \
[[ "$(curl -o /dev/null -s -w "%{http_code}\n" http://localhost:8080/api/health)" == "200" ]]
参见文档 here
关于docker - 健康检查 - 网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51469723/