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

Apache Airflow中File Sensor无法触发问题求助

Docker部署Airflow中FileSensor无法检测文件的解决方案

核心问题

你遇到的问题本质是Docker容器与本地主机的文件系统隔离:

  • PythonOperator在Airflow容器内创建文件,默认路径是容器内部的工作目录(如/opt/airflow),本地主机无法直接访问;
  • 直接使用本地绝对路径(如c:\test\my_file.txt)时,容器内不存在这个路径,所以触发"No such file"错误。

具体解决步骤

1. 配置Docker共享卷

修改Airflow的docker-compose.yml,将本地目录挂载到容器内的固定路径,实现文件同步。以Windows为例,添加以下卷配置:

volumes:
  - ./dags:/opt/airflow/dags
  - ./logs:/opt/airflow/logs
  - ./plugins:/opt/airflow/plugins
  - c:/test:/opt/airflow/shared_files  # 本地c:\test目录挂载到容器内/opt/airflow/shared_files

修改后重启Airflow容器,确保卷挂载生效。

2. 统一使用容器内路径

调整DAG代码,让PythonOperator和FileSensor都使用容器内的挂载路径:

from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.sensors.filesystem import FileSensor
from datetime import datetime

def create_file():
    # 写入容器内的共享路径
    with open('/opt/airflow/shared_files/my_file.txt', 'w') as f:
        f.write('test content')

with DAG(
    'file_sensor_dag',
    start_date=datetime(2024, 1, 1),
    schedule_interval=None,
    catchup=False
) as dag:
    create_file_task = PythonOperator(
        task_id='create_my_file',
        python_callable=create_file
    )

    check_file_sensor = FileSensor(
        task_id='check_file_exists',
        filepath='/opt/airflow/shared_files/my_file.txt',
        fs_conn_id='fs_default',
        poke_interval=3,  # 缩短检测间隔,方便测试
        timeout=30
    )

    create_file_task >> check_file_sensor

3. 验证fs_default连接

进入Airflow管理控制台,确认fs_default连接的配置:

  • 连接类型选择File (path);
  • Extra字段留空即可(无需额外配置,默认使用容器内的文件系统)。

关键注意事项

  • Windows系统下,Docker挂载路径要使用正斜杠/,避免反斜杠\的转义问题;
  • 不要在Operator中混用本地路径和容器路径,所有文件操作必须统一使用容器内的挂载路径;
  • 测试前可以进入Airflow容器(docker exec -it <airflow-worker-container-name> bash),手动检查路径是否存在、文件是否生成。

内容的提问来源于stack exchange,提问作者Robert C. Fountain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:28:15