You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow中PostgresOperator加载SQL文件遇jinja2模板未找到问题求助

解决方案

1. 修正容器内路径配置

Docker部署的Airflow中,宿主机的绝对路径在容器内并不生效——你配置的template_searchpath用的是宿主机路径,但容器只能识别自身内部的文件路径。
通常宿主机/home/etl/airflow-docker/dags会被挂载到容器内的/opt/airflow/dags,所以需要把template_searchpath改为容器内的对应路径:

dag = DAG(
    'dag_that_runs_delete_query',
    default_args=default_args,
    description='A DAG that runs a sql query',
    schedule='0 4 * * *',
    catchup=False,
    template_searchpath="/opt/airflow/dags/external_datasources/dw/queries"
)

2. 用相对路径替代硬编码(更可靠)

避免依赖容器或宿主机的固定路径,通过DAG文件的位置动态计算SQL文件路径:

from pathlib import Path

# 获取当前DAG文件所在目录
dag_dir = Path(__file__).parent
# 拼接出queries目录的路径
template_searchpath = str(dag_dir / "queries")

dag = DAG(
    'dag_that_runs_delete_query',
    default_args=default_args,
    description='A DAG that runs a sql query',
    schedule='0 4 * * *',
    catchup=False,
    template_searchpath=template_searchpath
)

这种方式不受挂载路径变化影响,兼容性更强。

3. 验证容器内文件状态

进入Airflow容器,确认SQL文件是否存在:

# 查找Airflow容器ID
docker ps | grep airflow
# 进入容器
docker exec -it <容器ID> bash
# 检查文件是否存在
ls /opt/airflow/dags/external_datasources/dw/queries/delete.sql

如果文件不存在,说明docker-compose.yaml中的DAG挂载配置有误,需要确保宿主机/home/etl/airflow-docker/dags正确挂载到容器/opt/airflow/dags。

4. 检查文件权限

确保Airflow运行用户(容器内默认是airflow)有SQL文件的读取权限:

# 容器内查看权限
ls -l /opt/airflow/dags/external_datasources/dw/queries/delete.sql
# 宿主机调整权限(如果需要)
chmod -R 755 /home/etl/airflow-docker/dags/external_datasources

内容的提问来源于stack exchange,提问作者Zisis F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:48:32