Celery Flower Inspect方法调用失败,求docker-compose配置排查建议
问题描述
我将机器学习应用的Celery Flower&Worker、Fast API、Redis、RabbitMQ组件整合到docker-compose中,但celery_flower组件出现Inspect方法调用失败的错误,影响相关调用。无法分享ML和celery_flower的镜像,希望得到docker-compose文件的可能问题排查建议。
docker-compose配置
version: "3.9" services: web: image: custom-image container_name: web_app ports: - 8080:8080 - 14565:14565 depends_on: - amqp - celery_worker - redis amqp: image: rabbitmq:3 container_name: rabbit_mq_test ports: - 4369:4369 - 5672:5672 - 25672:25672 - 15672:15672 redis: image: redis container_name: redis_container ports: - 6379:6379 celery_worker: image: custom-image working_dir: /webapp/endpoints/contents/ container_name: celery_worker command: /opt/conda/envs/webapp/bin/celery -A router.celery_app worker --loglevel=info -P threads depends_on: - amqp - redis celery_flower: container_name: celery_flower working_dir: /webapp/endpoints/contents/ image: mher/flower:latest command: celery --broker 'amqp://guest:guest@amqp:5672//' --result-backend 'rpc://' flower environment: - CELERY_BROKER_URL=amqp://guest:guest@amqp:5672// - FLOWER_PORT=5555 ports: - 5555:5555 depends_on: - amqp - redis
celery_flower错误日志
celery_flower | [I 221213 19:33:42 command:162] Visit me at http://localhost:5555 celery_flower | [I 221213 19:33:42 command:170] Broker: amqp://guest:**@amqp:5672// celery_flower | [I 221213 19:33:42 command:171] Registered tasks: celery_flower | ['celery.accumulate', celery_flower | 'celery.backend_cleanup', celery_flower | 'celery.chain', celery_flower | 'celery.chord', celery_flower | 'celery.chord_unlock', celery_flower | 'celery.chunks', celery_flower | 'celery.group', celery_flower | 'celery.map', celery_flower | 'celery.starmap'] celery_flower | [W 221213 19:33:42 command:177] Running without authentication celery_flower | [I 221213 19:33:48 mixins:225] Connected to amqp://guest:**@amqp:5672// celery_flower | [W 221213 19:33:49 inspector:42] Inspect method active_queues failed celery_flower | [W 221213 19:33:49 inspector:42] Inspect method active failed celery_flower | [W 221213 19:33:49 inspector:42] Inspect method scheduled failed celery_flower | [W 221213 19:33:49 inspector:42] Inspect method reserved failed celery_flower | [W 221213 19:33:49 inspector:42] Inspect method registered failed celery_flower | [W 221213 19:33:49 inspector:42] Inspect method revoked failed celery_flower | [W 221213 19:33:49 inspector:42] Inspect method conf failed celery_flower | [W 221213 19:33:49 inspector:42] Inspect method stats failed
注:Celery Flower仪表板外观无异常。
排查建议
- 版本兼容性检查:
mher/flower:latest可能和自定义镜像中的Celery版本不匹配,版本差异会导致Inspect方法调用失败。建议指定与Worker同版本的Flower镜像,或在Flower容器中安装一致版本的Celery。 - Broker配置一致性验证:确认Worker的
router.celery_app中Broker配置(虚拟主机、账号、密码、端口)与Flower的amqp://guest:guest@amqp:5672//完全一致。 - Result Backend配置修复:当前Flower使用
rpc://作为结果后端,但Worker配置的是Redis。需统一两者的结果后端,修改Flower的command为:celery --broker 'amqp://guest:guest@amqp:5672//' --result-backend 'redis://redis:6379/0' flower,同时添加环境变量CELERY_RESULT_BACKEND=redis://redis:6379/0。 - Worker连接状态确认:查看celery_worker的日志,确认Worker已正常启动并成功连接到RabbitMQ,无连接或认证错误。Worker未连上Broker时,Flower无法通过Inspect获取数据。
- 启动顺序优化:
depends_on仅保证容器启动顺序,不保证服务就绪。可给Flower添加启动延迟,比如修改command为:sh -c "sleep 10 && celery --broker 'amqp://guest:guest@amqp:5672//' --result-backend 'redis://redis:6379/0' flower",或使用wait-for-it工具等待RabbitMQ和Worker就绪后再启动Flower。 - 容器网络连通性测试:进入celery_flower容器,执行
ping amqp和ping celery_worker确认网络连通;再手动执行celery inspect active -A router.celery_app --broker amqp://guest:guest@amqp:5672//测试Inspect命令是否能获取Worker数据。 - RabbitMQ虚拟主机权限检查:默认虚拟主机为
/,确保Worker和Flower均使用该虚拟主机,且RabbitMQ未修改默认虚拟主机的权限配置。
内容的提问来源于stack exchange,提问作者Suraj
相关产品推荐
相关产品推荐

