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

Docker部署Airflow示例DAG正常但自定义DAG失败且UI无日志

问题描述

采用Bitnami官方Docker镜像以多容器分离架构部署Airflow,当前运行的容器实例信息如下:

CONTAINER ID   IMAGE                              COMMAND                  CREATED        STATUS       PORTS                                       NAMES
b02acfa97aa4   bitnami/airflow-worker:latest      "/opt/bitnami/script…"   24 hours ago   Up 5 hours   8793/tcp                                    airflow-worker
6d3248484abf   bitnami/airflow-scheduler:latest   "/opt/bitnami/script…"   24 hours ago   Up 5 hours                                               airflow-scheduler
a77104ebab02   bitnami/airflow:latest             "/opt/bitnami/script…"   24 hours ago   Up 5 hours   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   airflow
e9240395fc51   bitnami/redis:latest               "/opt/bitnami/script…"   24 hours ago   Up 5 hours   6379/tcp                                    redis
e1aad6ab1ba1   bitnami/postgresql:latest          "/opt/bitnami/script…"   24 hours ago   Up 5 hours   5432/tcp                                    postgresql

当前环境异常现象:

  • 内置示例DAG可正常执行,Web UI可查看运行日志,base_log_folder路径下可检索到对应日志文件
  • 所有自定义DAG执行失败,Web UI无任何相关日志展示,base_log_folder路径下也未生成自定义DAG的日志文件,无法定位失败根因
排查步骤(按问题命中概率排序)

1. 优先排查DAG解析阶段错误

这是自定义DAG失败且无任务日志的最高发原因:DAG如果在语法检查、依赖导入阶段就失败,根本不会进入任务调度执行流程,自然不会生成任务级别的运行日志

  • 进入scheduler容器执行DAG列表扫描命令,直接抓取解析报错:
    docker exec -it airflow-scheduler airflow dags list
    
    命令执行过程中输出的所有ImportError、语法错误、权限错误都是根因,对应修复即可:
    • 语法问题:对照部署的Airflow版本支持的Python语法检查DAG代码,不要用高版本Python独有的语法编写DAG
    • 依赖问题:自定义DAG用到的第三方Python包,必须同时安装在webserver、scheduler、worker三个容器内,缺任何一个节点的依赖都会导致解析或执行失败
    • 路径问题:确认三个核心容器的dags_folder配置指向同一份挂载的DAG目录,容器内运行Airflow的用户对DAG文件有可读权限
  • 直接拉取scheduler最近的服务日志,筛选DAG解析相关报错:
    docker logs airflow-scheduler --tail 200 | grep -E "ERROR|Failed to import|DagBag"
    
    所有DAG解析失败的栈信息都会打印在该日志中。

2. 检查日志配置与共享卷一致性

当前部署搭配Redis作为消息队列,默认使用CeleryExecutor架构,任务实际运行在worker节点,日志由worker生成,webserver需要读取共享存储里的日志才能在UI展示:

  • 由于示例DAG日志可正常查看,说明基础日志配置大概率是通的,这一步直接拉取worker节点服务日志,搜索自定义DAG的ID,查看任务被worker拉取后是否抛出异常:
    docker logs airflow-worker --tail 300 | grep "你的自定义DAG_ID"
    
  • 交叉验证三个节点的日志配置:分别在三个核心容器执行以下命令,确认返回的base_log_folder路径完全一致,且路径对应的是三个容器共同挂载的共享卷,而非容器本地存储:
    # 分别替换容器名为airflow、airflow-scheduler、airflow-worker执行
    docker exec -it <容器名> airflow config get-value logging base_log_folder
    

3. 检查DAG文件的属主与权限

Bitnami的Airflow镜像默认用UID为1001的非root用户运行服务,如果你挂载到容器里的自定义DAG文件是root用户创建、权限设置为600,容器内的服务进程会因为没有读权限解析DAG失败,且部分版本不会抛出明确的权限报错:

  • 在宿主机的DAG挂载目录下执行以下命令修复权限:
    # 替换为你实际的dags目录宿主机路径
    chown -R 1001:1001 /path/to/your/dags/folder
    chmod -R 644 /path/to/your/dags/folder
    
    修复后等待1-2分钟让scheduler重新扫描DAG目录,再触发DAG测试。

4. 开启DEBUG日志抓取隐藏报错

如果以上步骤都没定位到问题,临时把三个核心容器的Airflow日志级别调整为DEBUG,重启容器后手动触发一次自定义DAG,分别查看scheduler和worker的服务日志,就能拿到完整的错误栈定位问题。


内容的提问来源于stack exchange,提问作者Venkat V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:12:29