J'essaye de construire mon flux d'air en utilisant docker et rabbitMQ. J'utilise rabbitmq: image de gestion 3. Et je suis en mesure d'accéder à rabbitMQ UI et à l'API.
Dans airflow, je construis un serveur web airflow, un planificateur d'airflow, un travailleur airflow et une fleur airflow. Le fichier Airflow.cfg est utilisé pour configurer le flux d'air.
Où j'utilise broker_url = amqp://user:[email protected]:5672/
et celery_result_backend = amqp://user:[email protected]:5672/
Mon fichier de composition Docker est le suivant
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
Je suis capable de créer des images à l'aide de Docker Composer. Cependant, je ne suis pas en mesure de connecter mon planificateur de flux d'air à rabbitMQ. J'obtiens l'erreur suivante:
consommateur: impossible de se connecter à amqp: // utilisateur: ** @ localhost: 5672 //: [Errno 111] Connexion refusée.
J'ai essayé d'utiliser 127.0.0.1 et localhost à la fois.
Qu'est ce que je fais mal ?
Depuis vos conteneurs airflow
, vous devriez pouvoir vous connecter au service rabbit1
. Il vous suffit donc de changer amqp://user:**@localhost:5672//:
à amqp://user:**@rabbit1:5672//:
et ça devrait marcher.
Docker compose crée un réseau par défaut et y attache des services qui ne lui définissent pas explicitement de réseau.
Vous n'avez pas besoin d'exposer les ports 5672 et 15672 sur rabbit1, sauf si vous souhaitez pouvoir y accéder depuis l'extérieur de l'application.
De plus, il n'est généralement pas recommandé de créer des images dans Docker-compose.
J'ai résolu ce problème en installant le serveur rabbitMQ dans mon système avec la commande Sudo apt install rabbitmq-server
.