Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Docker服务运行状况检查不适用于spring引导应用程序_Java_Docker_Spring Boot - Fatal编程技术网

Java Docker服务运行状况检查不适用于spring引导应用程序

Java Docker服务运行状况检查不适用于spring引导应用程序,java,docker,spring-boot,Java,Docker,Spring Boot,我正在以docker服务的形式运行我的spring boot web应用程序,它在没有运行状况检查的情况下运行良好 但当我尝试创建带有运行状况检查选项的docker服务时,我的服务会在一段时间后(可能是在运行状况检查超时后)自动重新启动,而且永远不会稳定 我创建了\healthrest端点,并返回ok 下面是我用来创建带健康检查选项和不带健康检查选项的服务的命令 具有运行状况检查选项的命令: sudo docker service create \ --health-cmd="curl

我正在以docker服务的形式运行我的spring boot web应用程序,它在没有运行状况检查的情况下运行良好

但当我尝试创建带有运行状况检查选项的docker服务时,我的服务会在一段时间后(可能是在运行状况检查超时后)自动重新启动,而且永远不会稳定

我创建了
\health
rest端点,并返回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秒才能启动和运行。

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

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

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

为什么创建自己的端点而不使用执行器
/health
端点?另外,如果是在Spring Boot 2.x上,那么url已更改为
/exactor/health
。我不使用exactor,它是简单的hello world类型的应用程序,直到为什么不使用exactor,而是发明自己的。然而,我不知道为什么它会失败。如果结果更频繁,则not not OK docker将重新启动容器。因此,实际上可能是您自己的端点存在问题。在这里,我在health-cmd中指定了健康检查url。是的,您是对的。在docker映像中安装crul后工作正常