我正在尝试使用Docker和RabbitMQ构建气流。我正在使用RabbitMQ:3管理图像。我能够访问RabbitMQ UI和API。
在气流中,我正在建造气流网络服务器,气流调度程序,气流工人和气流花。airflow.cfg文件用于配置气流。
我在哪里使用broker_url = amqp://user:password@127.0.0.1:5672/
和celery_result_backend = amqp://user:password@127.0.0.1:5672/
我的docker组成的文件如下
version: '3'
services:
rabbit1:
image: "rabbitmq:3-management"
hostname: "rabbit1"
environment:
RABBITMQ_ERLANG_COOKIE: "SWQOKODSQALRPCLNMEQG"
RABBITMQ_DEFAULT_USER: "user"
RABBITMQ_DEFAULT_PASS: "password"
RABBITMQ_DEFAULT_VHOST: "/"
ports:
- "5672:5672"
- "15672:15672"
labels:
NAME: "rabbitmq1"
webserver:
build: "airflow/"
hostname: "webserver"
restart: always
environment:
- EXECUTOR=Celery
ports:
- "8080:8080"
depends_on:
- rabbit1
command: webserver
scheduler:
build: "airflow/"
hostname: "scheduler"
restart: always
environment:
- EXECUTOR=Celery
depends_on:
- webserver
- flower
- worker
command: scheduler
worker:
build: "airflow/"
hostname: "worker"
restart: always
depends_on:
- webserver
environment:
- EXECUTOR=Celery
command: worker
flower:
build: "airflow/"
hostname: "flower"
restart: always
environment:
- EXECUTOR=Celery
ports:
- "5555:5555"
depends_on:
- rabbit1
- webserver
- worker
command: flower
我能够使用Docker组成来构建图像。但是,我无法将气流调度程序连接到RabbitMQ。我会有以下错误:
消费者:无法连接到AMQP://用户:**@localhost:5672//:[errno 111]连接拒绝。
我尝试使用127.0.0.1和localhost。
我做错了什么?
从airflow
容器中,您应该能够连接到服务rabbit1
。因此,您需要做的就是将amqp://user:**@localhost:5672//:
更改为amqp://user:**@rabbit1:5672//:
,并且应该起作用。
Docker组成创建默认网络并连接未明确定义网络的服务。
您无需公开5672&15672在兔子上的端口,除非您希望能够从应用程序外部访问它。
另外,通常不建议在Docker-Compose中构建图像。
我通过使用命令sudo apt install rabbitmq-server
将RabbitMQ服务器安装到我的系统中解决了此问题。