【问题标题】:Docker service health check is not working for spring boot applicationDocker 服务健康检查不适用于 Spring Boot 应用程序
【发布时间】:2019-03-08 15:33:57
【问题描述】:

我正在将我的 Spring Boot Web 应用程序作为 docker 服务运行,并且在没有运行状况检查的情况下运行良好。

但是当我尝试使用健康检查选项创建 docker 服务时,我的服务会在一段时间后自动重启(可能在健康检查超时之后)并且它永远不会稳定。

我创建了\health 休息端点并且只是返回 ok 这是我用来创建带有健康检查选项和不带它的服务的命令。

带有健康检查选项的命令:

sudo docker service create \
    --health-cmd="curl --silent --fail localhost:8090/health || exit 1" \
    --health-interval=5s \
    --health-retries=12 \
    --health-timeout=2s \
    --health-start-period=60s \
    --name=my-service \
    -p "8090:8090" \
    my-docker-img

输出:

s43fbah1qdlxb01s4x5veecos
overall progress: 0 out of 1 tasks 
1/1: starting  [============================================>      ] 

没有健康检查的命令:

sudo docker service create \
    --name=my-service \
    -p "8090:8090" \
    my-docker-img

我的 Spring Boot 应用程序需要 20 秒才能启动和运行。

【问题讨论】:

  • 你为什么创建自己的端点而不使用执行器/health端点?此外,如果这是在 Spring Boot 2.x 上,则 url 已更改为 /actuator/health
  • 我没有使用执行器,它是简单的 hello world 类型的应用程序
  • 为什么不使用执行器,而是自己发明。但是不确定为什么会失败。如果结果更频繁,则不是 OK docker 将重新启动容器。所以实际上可能是您自己的端点有问题。
  • 这里我在health-cmd中指定了健康检查的url。

标签: java docker spring-boot


【解决方案1】:

确保容器中安装了“curl”。 --health-cmd="curl --silent --fail localhost:8090/health || exit 1" 可能会失败。其他一切看起来都很好。

以下命令将帮助您调试问题。您将能够看到日志:

sudo docker inspect --format='{{json .State.Health}}' [container-name-or-id]

【讨论】:

  • 是的,你是对的。在我的 docker 映像中安装 crul 后工作正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多