如何在非airflow命名的文件夹下通过docker-compose运行Airflow
问题原因
该问题由Docker Compose默认机制和Airflow官方配置的隐性依赖共同导致:
- Docker Compose默认将当前文件夹名称作为项目名,所有创建的容器、网络、存储卷都会自动加上该项目名作为前缀,Airflow官方默认配置依赖
airflow作为项目名前缀。 - 官方
docker-compose.yaml默认会挂载当前目录下的dags、logs、plugins、config四个目录,同时需要同目录下的.env文件提供AIRFLOW_UID等环境变量,若仅移动yaml文件到其他目录,缺少对应目录和环境变量就会导致airflow-init服务权限不足、健康检查失败。
解决方法
方案一:新增配置文件(推荐,一次配置永久生效)
在存放docker-compose.yaml的任意文件夹下,执行以下操作即可正常启动:
- 创建必需的本地挂载目录:
mkdir -p ./dags ./logs ./plugins ./config
- 在同目录下创建
.env文件,写入以下内容:
# 固定项目名称为airflow,避免目录名变化导致资源前缀冲突 COMPOSE_PROJECT_NAME=airflow # 对齐官方默认的运行用户ID,避免挂载目录权限报错 AIRFLOW_UID=50000 AIRFLOW_GID=0
- 执行启动命令:
docker-compose up -d
方案二:启动时指定参数(临时使用)
如果不想修改配置,每次启动时手动指定项目名即可:
docker-compose -p airflow up -d
注意事项
- 如果之前在其他目录启动过Airflow,建议先清理旧的无用存储卷避免冲突:
docker volume prune - 若启动后仍存在权限报错,执行
chmod -R 777 ./dags ./logs ./plugins ./config开放挂载目录权限即可。
内容的提问来源于stack exchange,提问作者Luiz Tauffer
相关产品推荐
相关产品推荐

