当前位置: 首页 > 面试题库 >

Celery工作人员无法连接到Docker实例上的Redis

朱兴运
2023-03-14
问题内容

我有一个运行Django应用程序的dockerized设置,在其中使用Celery任务。celery使用Redis作为经纪人。

版本控制:

  • Docker版本17.09.0-CE,构建afdb6d4
  • docker-compose版本1.15.0,构建e12f3b9
  • 的Django = = 1.9.6
  • django-celery-beat == 1.0.1
  • celery== 4.1.0
  • celery[redis]
  • redis == 2.10.5

问题:

我的celery工人似乎无法连接到位于localhost:6379的redis容器。我可以在指定端口上远程登录到Redis服务器。我能够验证容器上的redis服务器正在运行。

当我手动连接到Celery docker实例并尝试使用命令创建工作线程时,celery -A backend worker -l info我得到通知:

[2017-11-13 18:07:50,937: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: Error 99 connecting to localhost:6379. Cannot assign requested address.. Trying again in 4.00 seconds...

笔记:

我能够远程登录到端口6379上的redis容器。在redis容器上,redis-server正在运行。

还有什么我想念的吗?我已经走得很远了,但感觉好像我错过了一些非常简单的事情。

DOCKER配置文件

泊坞窗,compose.common.yml 这里
泊坞窗,compose.dev.yml 这里


问题答案:

当您使用docker-
compose时,您将不会localhost用于容器间通信,而将使用容器的由compose分配的主机名。在这种情况下,您的redis容器的主机名是redis。下面的顶级元素services:是您的默认主机名。

因此,要使Celery连接到Redis,您应该尝试redis://redis:6379/0。由于协议和服务名称相同,因此我将详细说明:如果您在docker-
compose中将redis服务命名为“ butter-pecan-redis”,则应使用redis://butter-pecan- redis:6379/0

另外,docker-
compose.dev.yml在公共网络上似乎没有Celery和红豆,这可能会导致它们彼此看不见。我相信他们需要共享至少一个公共网络才能解析各自的主机名。

docker-
compose中的网络在前几段中都有一个示例,其中包含docker-
compose.yml。



 类似资料:
  • 问题内容: 我尝试创建Kibana和Elasticsearch,看来Kibana在识别Elasticsearch时遇到了麻烦。 这是我的步骤: 1)建立网络 2)运行Elasticsearch容器 3)运行Kibana容器 通过浏览器通过http:// localhost:9200 / 连接到Elasticsearch时,我得到JSON输出。 但是,当我打开HTTP://本地主机:5601 /我得

  • 我按照https://www.elastic.co/guide/en/elasticsearch/reference/6.5/docker.html和https://www.elastic.co/guide/en/kibana/6.5/docker.html但它似乎并没有很好地与kibana工作,ES工作正常。 我试着单独启动kibana,但最后我把它添加到了一个docker compose文件中

  • 我试图创建Kibana和Elasticsearch,似乎Kibana无法识别Elasticsearch。 以下是我的步骤: 1) 创建网络 2) 运行Elasticsearch容器 3) 运行Kibana容器 当我通过连接Elasticsearch时,我会得到一个JSON输出http://localhost:9200/通过我的浏览器。 但当我打开http://localhost:5601/我明白了

  • 我已经创建了AWS ec2实例并关联到一个安全组。在关联的安全组中,我已经向所有人开放了HTTP(HTTP, TCP,80,0.0.0.0/0)、SSH(SSH, TCP,22,0.0.0.0/0)和ICMP(All ICMP, All, N/A,0.0.0.0/0)。 但当我尝试ping到实例时,它失败了;给出请求超时。入站规则设置 此外,使用PuTTY或openssh连接到实例也会失败。它给出

  • 您似乎试图通过本机驱动程序端口上的HTTP访问MongoDB。 而且日志显示我的mongodb是健康的。我想是我试图通过浏览器访问的最后一行。 2017-01-25T21:11:13.509+0000 I JOURNAL[initandlisten]JOURNAL dir=/data/db/Journal2017-01-25T21:11:13.509+0000 I JOURNAL[initandl