运行Celery任务的Docker容器的HEALTHCHECK?

我知道检查Docker容器的健康状况的方法之一是使用命令

HEALTHCHECK CMD curl --fail http://localhost:3000/ || exit 1 

但是如果工人没有这样的URL,那么在这种情况下如何检查容器的健康状况呢?

celery inspect ping命令派上用场,因为它是一个完整的行程:在代理上发送一个“ping”任务,工作人员响应,芹菜获取响应。

假设你的应用名为tasks.add ,你可以ping所有的工作人员:

 /app $ celery inspect ping -A tasks.add -> celery@aa7c21dd0e96: OK pong -> celery@57615db15d80: OK pong 

使用aa7c21dd0e96作为Docker主机名,因此在$HOSTNAME可用。

要ping单个节点,您将不得不运行:

 celery inspect ping -A tasks.add -d celery@$HOSTNAME 

这里, d代表目的地

要添加到您的Dockerfile的行:

 HEALTHCHECK CMD celery inspect ping -A tasks.add -d celery@$HOSTNAME 

示例输出:

 /app $ celery inspect ping -A tasks.add -d fake_node Error: No nodes replied within time constraint. /app $ echo $? 69 

不健康的,如果节点不存在或不答复

 /app $ celery inspect ping -A tasks.add -d celery@$HOSTNAME -> celery@d39b3d31cc13: OK pong /app $ echo $? 0 

健康节点回复pong

 /app $ celery inspect ping -d celery@$HOSTNAME Traceback (most recent call last): ... raise socket.error(last_err) OSError: [Errno 111] Connection refused /app $ echo $? 1 

当代理不可用时不健康 – 我删除了应用程序,所以它试图连接到本地AMPQ并失败。这可能不适合您的需要,代理不健康,而不是工作人员。