如何在Airflow DAGFactory中指定配置文件路径?
解决Docker部署Airflow中dag-factory无法找到配置文件的问题
问题分析
核心矛盾是dag-factory强制要求使用绝对路径加载配置文件,但你之前尝试的路径要么不符合格式要求,要么与Airflow容器内的实际文件路径不匹配。虽然能在容器内直接访问文件,但Airflow调度器/worker运行时的工作目录或路径拼接逻辑导致代码无法定位到正确位置。
解决方案
通过动态获取当前脚本的绝对路径来拼接配置文件路径,彻底避免硬编码路径带来的适配问题。修改main.py代码如下:
from airflow import DAG import dagfactory import os # 获取当前脚本所在的绝对目录 current_script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接配置文件的绝对路径 config_file_path = os.path.join(current_script_dir, "configs", "config.yaml") dag_factory = dagfactory.DagFactory(config_file_path) dag_factory.clean_dags(globals()) dag_factory.generate_dags(globals())
为什么之前的路径无效?
configs/config.yaml:属于相对路径,不符合dag-factory对绝对路径的强制要求/configs/config.yaml:指向容器根目录下的configs文件夹,与实际挂载的/opt/airflow/dags路径不匹配/usr/local/airflow/dags/configs/config.yaml:这是旧版Airflow的默认路径,你使用的新版Airflow默认根路径为/opt/airflowos.getcwd()+"/configs/config.yaml":Airflow运行时的工作目录并非/opt/airflow/dags(通常是/opt/airflow),导致拼接后的路径指向错误位置
验证技巧
若仍有疑问,可在main.py中添加路径打印语句,确认Airflow运行时的实际路径:
print(f"当前脚本绝对路径: {os.path.abspath(__file__)}") print(f"配置文件路径: {config_file_path}")
查看Airflow调度器的日志,对比打印路径与容器内实际文件路径是否一致,快速定位问题。
内容的提问来源于stack exchange,提问作者Anirban Saha
相关产品推荐
相关产品推荐

