DockerとrabbitMQを使用してエアフローを構築しようとしています。 rabbitmq:3-management画像を使用しています。そして、rabbitMQ UIとAPIにアクセスできます。
エアフローでは、エアフローウェブサーバー、エアフロースケジューラ、エアフローワーカー、エアフローフラワーを構築しています。 Airflow.cfgファイルは、airflowの構成に使用されます。
私が使用している場所broker_url = amqp://user:[email protected]:5672/
およびcelery_result_backend = amqp://user:[email protected]:5672/
私のdocker composeファイルは次のとおりです
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 composeを使用してイメージを構築できます。ただし、airflowスケジューラをrabbitMQに接続できません。次のエラーが発生します。
コンシューマ:amqp:// user:** @ localhost:5672 //に接続できません:[Errno 111]接続が拒否されました。
127.0.0.1とlocalhostの両方を使用してみました。
私は何を間違っていますか?
airflow
コンテナー内から、サービスrabbit1
に接続できるはずです。したがって、amqp://user:**@localhost:5672//:
をamqp://user:**@rabbit1:5672//:
に変更するだけで動作します。
Docker composeはデフォルトネットワークを作成し、ネットワークを明示的に定義しないサービスをそれにアタッチします。
アプリケーションの外部からアクセスできるようにする場合を除き、rabbit1の5672および15672ポートを公開する必要はありません。
また、一般的にdocker-compose内でイメージを構築することは推奨されません。
この問題は、rabbitMQサーバーをSudo apt install rabbitmq-server
コマンドを使用してシステムにインストールすることで解決しました。