我知道检查 Docker 容器运行状况的方法之一是使用命令
HEALTHCHECK CMD curl --fail http://localhost:3000/ || exit 1
但是如果 worker 没有这样的URL可以点击,那么在这种情况下如何检查容器的健康状况?
最佳答案
celery inspect ping
命令派上用场了,因为它会执行整个行程:它向代理发送“ping”任务,工作人员响应,而 celery 获取响应。
假设您的应用名为 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 并失败 这可能不适合您的需求,经纪人不健康,而不是 worker 。
关于docker - 运行 Celery 任务的 Docker 容器的 HEALTHCHECK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40430543/