Airflow无法找到credentials.json文件路径的问题排查与解决
解决Airflow中找不到credentials.json文件的问题
你遇到的FileNotFoundError通常由路径权限、实际文件位置不符或Airflow部署配置问题导致,以下是具体排查和修复方案:
可能的原因及修复步骤
1. Airflow运行用户无文件读取权限
Airflow默认以airflow用户运行,即便文件存在目标路径,若用户没有读取权限也会触发报错。
- 修复命令:
# 修改文件所属用户为airflow sudo chown airflow:airflow /opt/airflow/data/credentials.json # 设置文件可读权限 sudo chmod 644 /opt/airflow/data/credentials.json
2. 文件实际路径与代码指定路径不符
你可能误以为文件已放置到目标路径,但实际存在拼写错误、大小写差异(Linux系统路径区分大小写),或是Docker部署时本地目录未正确映射到容器内。
- 排查方式:
- 本地部署Airflow:直接在服务器执行
ls /opt/airflow/data/查看文件是否存在。 - Docker部署Airflow:进入容器内部检查路径,命令如下:
# 找到Airflow worker或webserver容器ID docker ps # 进入容器 docker exec -it <container_id> bash # 检查文件是否存在 ls /opt/airflow/data/
- 本地部署Airflow:直接在服务器执行
- 代码中添加存在性校验(辅助排查):
def connect_data_from_gsheet(): credentials_file = '/opt/airflow/data/credentials.json' # 先校验文件是否存在 if not os.path.exists(credentials_file): raise FileNotFoundError(f"Credentials file missing at: {credentials_file}") gc = gspread.service_account(filename=credentials_file) sheet = gc.open("MDA_team_member_copy")
3. Docker部署时未正确挂载数据目录
若使用Docker Compose部署Airflow,需确保本地的/opt/airflow/data目录已挂载到容器内对应路径,否则容器内无法访问本地文件。
- 修复:检查
docker-compose.yml中的volumes配置,添加或确认以下映射:
修改后重启Airflow服务:services: airflow-webserver: volumes: - ./data:/opt/airflow/data airflow-worker: volumes: - ./data:/opt/airflow/datadocker-compose down && docker-compose up -d
内容的提问来源于stack exchange,提问作者Linh Le
相关产品推荐
相关产品推荐

