我正在尝试创建 docker-compose 文件,该文件将使用 celery 任务运行 django apache 服务器,并使用 rabbitmq 作为消息代理。我的问题是 celery 无法连接到 rabbitmq。 我收到了那个错误:
[2021-02-18 08:11:44,769: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@rabbitmq:5672//: [Errno 111] Connection refused.
另外,这是我第一次构建 docker 镜像,所以我可能在那里犯了很多错误。
我的 docker-compose 文件:
version: "3.8"
services:
server: &server
build:
context: .
environment:
- PYTHONUNBUFFERED=1
- CELERY_BROKER=amqp://admin:password@rabbitmq:5672//
volumes:
- .:/var/www/html/public
ports:
- 80:80
command:
["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
depends_on:
- rabbitmq
- celery_beat
networks:
- main
rabbitmq:
container_name : rabbitmq
image: rabbitmq:3.8
hostname: rabbitmq
ports:
- 5672:5672
networks:
- main
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=password
celery_worker:
<<: *server
hostname: rabbitmq
command: celery -A public worker -l INFO
ports: []
networks:
- main
depends_on:
- rabbitmq
environment:
#- RABBITMQ_DEFAULT_USER=admin
#- RABBITMQ_DEFAULT_PASS=password
- CELERY_BROKER=amqp://admin:password@rabbitmq:5672//
networks:
main:
docker 文件:
FROM ubuntu:latest
ENV PYTHONUNBUFFERED=1
RUN apt-get -y update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 python3.8 python3-pip libapache2-mod-wsgi-py3
RUN pip3 install --upgrade pip
ADD requirements.txt .
RUN pip install -r requirements.txt
ADD ./scraper_project.conf /etc/apache2/sites-available/scraper_project.conf
ADD . /var/www/html/public
WORKDIR /var/www/html/public
RUN chown -R :www-data .
RUN chmod -R 775 .
EXPOSE 80
RUN a2ensite scraper_project
RUN a2dissite 000-default
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
celery 设置:
CELERY_BROKER_URL = os.environ['CELERY_BROKER']
最佳答案
已修复。问题是我在 celery worker 中设置了主机名。如果有人遇到类似问题,只需删除主机名:celery_worker 上的 rabbitmq。
关于python - 无法将 celery 与docker上的rabbitmq服务器连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66254663/