为什么我的 Celery Docker 没有连接到 Redis



我有一个用于运行芹菜的 Docker 实例,它是这样构建的:

docker build -t <me>/celery-imagemagick -f docker/celeryDockerFile .

然后我像这样运行它:

docker run --env-file ./docker/env --rm spaceofmotion/celery-imagemagick .

env 文件中有一些配置,包括针对本地redis-server的代理 URL。

CELERY_BROKER_URL=redis://192.168.86.23:6379/0 CELERY_RESULT_BACKEND=redis://192.168.86.23:6379/0

以上内容现已设置为本地测试。它进入芹菜启动并四处寻找 redis 的状态,只是无法连接并出现以下错误:

consumer: Cannot connect to redis://192.168.86.23:6379/0: Error 111 connecting to 192.168.86.23:6379. Connection refused..

如果我将 IP 地址更改为本地主机,那么可以预见的是它找不到服务器。但是,如果我只是在没有 Docker 的情况下通过执行 celery worker -A path.to.celery --loglevel=info 在本地运行所有这些,那么一切都可以正常工作 np。

我做错了什么?

默认情况下,

Docker 容器不会在主机网络 (192.168.x.x( 上运行。如果你使用的是 Linux 计算机,则可以使用 Docker 主机网络。

在这种情况下,您还可以添加端口映射。试试这个:

docker run -p 192.168.86.23:6379:6379 ...

这会将本地 Redis 端口映射到 Celery 容器中的localhost:6379。 https://docs.docker.com/config/containers/container-networking/#published-ports 还有更多。

这是一个较老的问题,但以下解决方案对我有用:

redis:
 image: redis:6.2-alpine
 networks:
  - djangonetwork
celery:
 networks:
  - djangonetwork
 restart: always
 build:
  context: .

将 Redis、Celery 和 Django 与 Celery URL 放在同一个网络中:

CELERY_BROKER_URL = 'redis://redis:6379/0'
CELERY_RESULT_BACKEND = "redis://redis:6379/0"

相关内容

  • 没有找到相关文章

最新更新