Windows Docker运行Airflow报PermissionError[Errno13]权限拒绝错误
问题根因
报错由两个问题叠加导致:
- 路径解析错误:代码中使用相对路径
../spotify_project,Airflow执行PythonOperator时默认工作目录为/opt/airflow,该相对路径最终解析为容器内的/opt/spotify_project,不在默认挂载的DAG、日志等可写目录范围内。 - 权限不匹配:官方Airflow Docker镜像默认使用UID为50000的
airflow用户运行服务,容器内/opt目录默认归root用户所有,普通用户无写入权限;加上Windows环境下Docker Desktop挂载宿主机目录时存在权限映射偏差,即便手动创建目录,未开放权限的情况下Airflow用户也无法写入。
日志中先提示两级子目录不存在,递归向上查找父目录最终在../spotify_project层触发权限拒绝,完全匹配上述问题特征。
修复方案
方案1:规范路径配置+正确挂载目录(推荐,长期可用)
- 第一步:替换DAG中的相对路径写法,改用绝对路径避免工作目录变动导致的解析错误,参考代码如下:
import os from pathlib import Path # 统一指定数据存储根目录,默认放在Airflow可写的/opt/airflow路径下 DATA_ROOT = Path(os.getenv("SPOTIFY_DATA_PATH", "/opt/airflow/spotify_project")) target_dir = DATA_ROOT / "output_data" / "history_json_raw" target_dir.mkdir(parents=True, exist_ok=True)
- 第二步:修改启动Airflow用的
docker-compose.yaml文件,在volumes配置段新增本地项目目录到容器的挂载,注意替换为你Windows本地spotify_project的真实路径:
volumes: - ./dags:/opt/airflow/dags - ./logs:/opt/airflow/logs - ./plugins:/opt/airflow/plugins # 新增以下挂载配置 - C:/your/local/project/spotify_project:/opt/airflow/spotify_project
- 第三步:重启容器并给挂载目录开放写入权限,在docker-compose.yaml所在目录打开PowerShell执行以下命令:
docker compose down docker compose up -d docker compose exec airflow-worker chmod -R 777 /opt/airflow/spotify_project
执行完成后重新触发DAG任务即可正常运行。
方案2:临时快速修复(仅适合本地测试场景)
如果不想修改挂载配置,可以直接进入运行任务的Airflow容器手动创建目录并授权,操作步骤如下:
- 执行
docker ps查看当前运行的Airflow worker、scheduler容器ID - 执行
docker exec -it <替换为实际容器ID> bash进入容器终端 - 在容器内执行以下命令创建目录并开放权限:
mkdir -p /opt/spotify_project chmod 777 /opt/spotify_project exit
注意:该方案为临时配置,容器销毁重建后会失效,不建议长期使用。
避坑提示
- Airflow任务中不要使用
../这类相对路径,不同组件、不同执行场景下工作目录可能发生变化,极易出现路径解析错误,所有文件路径一律使用绝对路径。 - Windows环境下使用Docker部署Airflow时,所有需要Airflow写入的目录,建议放在
/opt/airflow目录树范围内,或在挂载时确认权限配置正确,避免反复触发权限报错。
内容的提问来源于stack exchange,提问作者Christian Balanquit
相关产品推荐
相关产品推荐

