使用者:无法连接到 amqp://user:**@rabbit1:5672//:无法解析代理主机名



我已经仔细阅读了非常相似的堆栈溢出问题,并将我的代码更改为现在的样子。我仍然收到cannot resolve broker hostname错误。如果我只使用amqp:user:mypass@locahost:5672我会得到一个connection refused

# docker-compoose.yml
version: "3.8"
services: 
broker:
image: rabbitmq:3-management-alpine
hostname: rabbit1
environment: &env
RABBITMQ_ERLANG_COOKIE: "SWQOKODSQALRPCLNMEQG"
RABBITMQ_DEFAULT_USER: "user"
RABBITMQ_DEFAULT_PASS: "password"
RABBITMQ_DEFAULT_VHOST: "/"
CELERY_BROKER_URL: "amqp://user:password@rabbit1:5672"
ports:
- "5672:5672"
- "15672:15672"
expose:
- "5672"
networks:
- webnet
volumes: 
- .:/home/user
worker:
build: 
context: .
dockerfile: ./worker/Dockerfile
command: ["celery", "worker", "--app=worker.tasks.app", "--loglevel=INFO"]
environment: 
<<: *env
links: 
- broker 
depends_on: 
- broker
networks:
- webnet
volumes: 
- .:/home/user

networks:
webnet:
# Dockerfile
FROM python:3.7-slim
RUN groupadd user && useradd --create-home --home-dir /home/user -g user user
ENV CELERY_USER = user
WORKDIR /home/user
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
RUN rm requirements.txt

我尝试通过 docker-compose 启动 rabbitmq 代理,然后手动执行celery worker --app=tasks.app,这将在设置CELERY_BROKER_URL=amqp://user:mypass@localhost:5672后起作用

当我将工作线程和代理放在同一个 yaml 中时,它会抛出错误。我已经尝试过没有网络,也在Docker文件中手动设置CELERY_BROKER_URL。如果有人知道我做错了什么,我将不胜感激。

这里有一些事情发生。第一个在注释中解决的是,从worker容器的角度来看,您的 rabbitmq 服务在主机broker上可用,因此您的CELERY_BROKER_URL变量应指向amqp://user:password@broker:5672

第二个问题是 rabbitmq 需要一段时间才能启动。这意味着您最初会在celery worker首次启动时看到错误,因为它会在 rabbitmq 准备就绪之前尝试连接。但是,它将重试,直到成功。

我能够使用以下docker-compose.yml使一切正常工作:

version: "3.3"
services:
broker:
image: rabbitmq:3-management-alpine
hostname: rabbit1
environment: &env
RABBITMQ_ERLANG_COOKIE: "SWQOKODSQALRPCLNMEQG"
RABBITMQ_DEFAULT_USER: "user"
RABBITMQ_DEFAULT_PASS: "password"
RABBITMQ_DEFAULT_VHOST: "/"
CELERY_BROKER_URL: "amqp://user:password@broker:5672"
ports:
- "5672:5672"
- "15672:15672"
expose:
- "5672"
volumes: 
- .:/home/user
worker:
image: celery
command: ["celery", "worker", "-l" "INFO"]
environment:
<<: *env
volumes:
- .:/home/user

这与您的非常相似,但是 (a( 我使用的是官方celery映像,因为您没有向我们展示您的 Dockerfile,并且 (b( 我删除了links:密钥,因为links已被弃用,转而支持基于 DNS 的服务发现,现在是默认设置。哦,(c(我摆脱了自定义网络,因为如果您要创建单个网络,则不妨使用docker-compose为您创建的默认值。

当我提出这个问题时,我最终看到:

broker_1  | 2020-05-11 21:46:10.098 [info] <0.634.0> connection <0.634.0> (172.26.0.3:39372 -> 172.26.0.2:5672): user 'user' authenticated and granted access to vhost '/'
broker_1  | 2020-05-11 21:46:10.111 [info] <0.639.0> accepting AMQP connection <0.639.0> (172.26.0.3:39374 -> 172.26.0.2:5672)
worker_1  | [2020-05-11 21:46:10,100: INFO/MainProcess] Connected to amqp://user:**@broker:5672//
worker_1  | [2020-05-11 21:46:10,115: INFO/MainProcess] mingle: searching for neighbors
worker_1  | [2020-05-11 21:46:11,140: INFO/MainProcess] mingle: all alone

相关内容

  • 没有找到相关文章

最新更新