运行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并失败。这可能不适合您的需要,代理不健康,而不是工作人员。