Docker运行状况检查导致容器崩溃

时间:2020-01-24 18:10:37

标签: docker rabbitmq

我有一个自定义的Rabbitmq映像,正在与docker-compose(3.7)配合使用以启动docker集群。这是必要的,因为尝试在docker swarm中部署集群时存在一些特殊问题。该映像具有在主要节点和次要节点上运行的shell脚本,并进行了运行集群所需的修改。这涉及到停止rabbitmq并运行rabbitmqctl命令以在两个节点之间创建集群。直到我尝试添加运行状况检查,此配置才能正常工作。我尝试将其添加到图像中并将其添加到撰写文件中。两者都会导致映像崩溃并不断重启。我有以下shell脚本被复制到图像中:

#!/bin/bash
set -eo pipefail

# A RabbitMQ node is considered healthy if all the below are true:
# * the rabbit app finished booting & it's running
# * there are no alarms
# * there is at least 1 active listener

rabbitmqctl eval '
{ true, rabbit_app_booted_and_running } = { rabbit:is_booted(node()), rabbit_app_booted_and_running },
{ [], no_alarms } = { rabbit:alarms(), no_alarms },
[] /= rabbit_networking:active_listeners(),
rabbitmq_node_is_healthy.
' || exit 1

在已经运行的映像上,它可以工作并产生正确的结果。 我尝试了在撰写文件中进行流式处理:

     healthcheck:
       interval: 60s 
       timeout: 60s 
       retries: 10 
       start_period: 600s
       test: ["CMD", "docker-healthcheck"]

似乎start_period被完全忽略了。我可以立即看到错误的健康状况。我还尝试了以下本机Rabbitmq诊断命令:

rabbitmq-diagnostics -q check_running && rabbitmq-diagnostics -q check_local_alarms

这奇怪地失败了,并显示了“无法找到rabbitmq-诊断”错误,尽管该程序肯定已经在运行了。我可以在已经运行的容器中成功执行命令。

如果我创建的容器没有运行状况检查,然后在命令行中添加以下内容:

docker service update --health-cmd docker-healthcheck --health-interval 60s --health-timeout 60s --health-retries 10 [container id]

它标志着容器健康。因此它可以工作,但不能在启动配置中使用。在我看来,健康检查应在10分钟后才能开始。我使用start_period参数等待一切启动的时间似乎并不重要,它仍然会导致容器失败。 这是一个错误还是start_period的工作方式有些神秘? 其他人都有这个问题吗?

0 个答案:

没有答案