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

标签 docker celery

我知道检查 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/

相关文章:

python - 继承 celery 任务

python - Celery 的 app.control.broadcast 期望什么 "command"?

linux - Team City“最小构建代理” Docker镜像-“npm:未找到” Linux问题?

docker - GitLab Runner 不使用注册表镜像

python - 可以等到 celery 组做好吗?

python - Celery SQS + 任务重复 + SQS 可见性超时

linux - Docker 容器作为 Linux 服务?

maven-release-plugin 在提交前自动运行脚本

docker - docker 内的 Jenkins (Jenkins)无法提取图像

python - 链接 celery 任务并隐式地将返回值从一个任务传递到另一个任务