docker - 气流网络服务器在 docker-compose 中找不到调度程序
问题描述
我目前正在尝试运行一个最小的 Airflow 环境来在我的本地机器上测试一些 DAG。设置非常基本:在初始化本地 sqlite 数据库后,我正在使用docker-compose
旋转 Airflow 网络服务器和调度程序。
我的docker-compose.yml
文件如下所示:
version: '3'
services:
webserver:
image: apache/airflow
container_name: airflow_webserver
restart: on-failure
volumes:
- ./dags:/opt/airflow/dags
- ./plugins:/opt/airflow/plugins
- ./scripts:/scripts
ports:
- 8080:8080
environment:
AIRFLOW_RUNAS_WEBSERVER: 1
depends_on:
- scheduler
entrypoint: /scripts/wait-for-it.sh scheduler:8793 -t 40 -- /scripts/docker-entrypoint.sh
scheduler:
image: apache/airflow
container_name: airflow_scheduler
restart: on-failure
ports:
- 8793:8793
volumes:
- ./dags:/opt/airflow/dags
- ./plugins:/opt/airflow/plugins
- ./scripts:/scripts
environment:
AIRFLOW_RUNAS_SCHEDULER: 1
entrypoint: /scripts/docker-entrypoint.sh
我的地方docker-entrypoint.sh
是:
#!/bin/bash
AIRFLOW_USERNAME=test
AIRFLOW_PASSWORD=test
if [ "$AIRFLOW_RUNAS_SCHEDULER" = "1" ]; then
echo "initializing airflow database"
airflow db init
echo "running airflow scheduler"
while true
do
airflow scheduler
echo "restarting airflow scheduler"
sleep 1
done
elif [ "$AIRFLOW_RUNAS_WEBSERVER" = "1" ]; then
echo "running airflow webserver"
airflow db upgrade
airflow users create \
--username=$AIRFLOW_USERNAME \
--password=$AIRFLOW_PASSWORD \
--firstname=test \
--lastname=test \
--email=test@test.com \
--role=Admin
exec airflow webserver -p 8080
elif [ "$AIRFLOW_RUNAS_WORKER" = "1" ]; then
echo "running airflow worker"
exec airflow worker
elif [ "$AIRFLOW_RUNAS_FLOWER" = "1" ]; then
echo "running airflow flower"
exec airflow flower
else
echo "ERROR: no AIRFLOW_RUNAS_* variable set"
exit 1
fi
现在,从日志中我可以清楚地看到docker-compose up
两者都运行airflow webserver
并airflow scheduler
正确启动了它们的服务,即使 Airflow 网络服务器似乎很难找到调度程序。在 UI 上,我受到了热烈的欢迎:
调度程序似乎没有运行。DAG 列表可能不会更新,并且不会安排新任务。
我应该如何找出为什么这两个服务不相互通信?
更新:
奇怪的是,如果我调整我docker-entrypoint.sh
以在同一个服务中运行所有步骤,那么一切都很顺利
exec airflow webserver -p 8080 & exec airflow scheduler
这使得跟踪变得复杂,因为所有内容都由同一个容器记录。
解决方案
推荐阅读
- jenkins - 在 Jenkins 中通过 Okta API 创建 Okta 用户
- coq - 流的感应原理
- google-apps-script - 使用脚本更改文件名后如何更新 Google 表单显示
- django - Django heroku 模板 password_reset_confirm.html 不起作用
- regex - 正则表达式匹配数字和字母或仅数字
- c# - 在 collectionview 的“ViewModel”上找不到绑定属性“fromICAO”
- android - Android:在应用程序更新中 - 想要灵活和即时弹出窗口的组合
- nginx - 具有可变位置和相对 url 的 Nginx 动态 proxy_pass
- python - 如何查找从 2 个不同站点拍摄的 2 张图像是否相似?
- pickle - 保存 TFIDF 词汇和转换并在新数据集上使用