Docker部署Airflow无法找到本地文件上传至S3的问题
Windows+Docker Airflow 文件找不到问题解决
核心问题
你碰到的FileNotFoundError根本原因是:Windows本地路径和Docker容器的Linux路径不兼容,而且DAG里直接用了Windows的绝对路径,容器里根本识别不了这个路径。
分步解决
1. 修改DAG中的文件路径
Docker容器运行的是Linux环境,只能识别容器内部的文件路径,不能写C:\xxx这类Windows路径。假设你docker-compose.yml里把本地dags文件夹挂载到了容器的/opt/airflow/dags(Airflow官方镜像默认的dags目录),那DAG里要改成:
# 替换原来的Windows路径 file_path = '/opt/airflow/dags/pricedata.xlsx'
2. 检查Docker挂载配置
确认docker-compose.yml的挂载项是否正确,示例配置如下:
services: airflow-webserver: volumes: - ./dags:/opt/airflow/dags # 本地当前目录的dags文件夹挂载到容器内对应目录 # 其他挂载配置...
注意:
- Windows下尽量用相对路径(比如
./dags),避免使用带空格、特殊字符的绝对路径(你的路径里有空格和希腊字符,极易导致挂载解析失败) - 若必须使用绝对路径,需将反斜杠替换为正斜杠,比如
/c/Users/plata/OneDrive/Υπολογιστής/projects backups/airflow-sqlserver/dags
3. 验证容器内文件是否存在
进入容器查看文件是否成功挂载:
# 先获取airflow容器的ID docker ps # 进入容器内部 docker exec -it <你的容器ID> /bin/bash # 查看dags目录下的文件列表 ls /opt/airflow/dags
如果看不到pricedata.xlsx,说明挂载存在问题,需检查:
- 本地文件是否确实放在指定的dags文件夹中
- 挂载路径是否存在拼写错误
- Docker Desktop是否有权限访问该目录(前往设置->资源->文件共享,勾选对应的磁盘)
4. 简化本地路径
你的本地路径包含空格(projects backups)和希腊字符,这类特殊字符容易导致Docker挂载解析异常。建议将项目迁移到路径更简洁的位置,比如C:\airflow-demo\dags,再重新配置挂载。
额外提醒
- Airflow的DAG代码运行在容器内部,所有文件操作都必须基于容器内的文件系统
- 如果需要处理Windows本地其他目录的文件,需单独将该目录挂载到容器内,示例配置:
volumes: - ./dags:/opt/airflow/dags - C:/Users/plata/OneDrive/files:/opt/airflow/files # 将本地文件目录挂载到容器内的files目录
之后在DAG里使用/opt/airflow/files/pricedata.xlsx即可访问该文件
内容的提问来源于stack exchange,提问作者panos
相关产品推荐
相关产品推荐

