我正在Docker容器中运行一个Spring Boot应用程序,使用Docker文件在容器内启动应用程序。如何检查容器内的Spring Boot应用程序健康状况?
如果容器停止或应用程序未运行,我需要根据健康检查自动重新启动容器或应用程序。这样,我可以确保Spring Boot应用程序始终正常运行。
我正在Docker容器中运行一个Spring Boot应用程序,使用Docker文件在容器内启动应用程序。如何检查容器内的Spring Boot应用程序健康状况?
如果容器停止或应用程序未运行,我需要根据健康检查自动重新启动容器或应用程序。这样,我可以确保Spring Boot应用程序始终正常运行。
如果您想将 Spring Boot 的 actuator/health
用作 Docker 健康检查,则必须在您的 docker-compose 文件 中像这样添加:
healthcheck:
test: "curl --fail --silent localhost:8081/actuator/health | grep UP || exit 1"
interval: 20s
timeout: 5s
retries: 5
start_period: 40s
编辑:这里的端口是management.server.port
。如果您没有指定它,那么默认是server.port value
(默认为8080)。
curl
,而且在使用 docker-compose
的 healthcheck
组件时也被称为反模式。 - Andrew T Finnelltest: ["CMD-SHELL", "pg_isready -U postgres"]
。 - LE GALL Benoîtcurl --fail --silent localhost:8081/actuator/health
。 - M. Justin这对我有效
healthcheck:
test: curl -m 5 --silent --fail --request GET http://localhost:8080/actuator/health | jq --exit-status -n 'inputs | if has("status") then .status=="UP" else false end' > /dev/null || exit 1
interval: 10s
timeout: 2s
retries: 10
我的服务器在索引上进行重定向,因此我使用重定向来进行健康检查,如下所示:
healthcheck:
test: curl -Is localhost:8080 | head -n 1 | grep 302 || exit 1
有很多方法可以监控Spring Boot应用程序的基础知识,独立使用Spring Boot Actuator。如果您正在使用REST API,则可以将“管理健康端口”暴露在与应用程序服务器端口不同的端口上。
https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
只需在pom.xml中包含spring actuator依赖项,并在您的applicaiton.properties/.yml中进行配置,这将公开上面链接中列出的端点。https://docs.docker.com/engine/reference/builder/#healthcheck
您可以设置重启策略,以确保容器在崩溃时重新启动:https://docs.docker.com/engine/reference/run/#restart-policies---restart