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

如何理解Airflow容器的“unhealthy”状态及相关部署故障排查

问题根因分析
  • 你使用的apache-airflow-providers-docker==1.2.0版本存在已知的Docker挂载泄露问题:该版本的DockerOperator执行任务后不会主动清理临时挂载的目录/卷,随着运行次数增加会产生大量僵尸挂载点,导致Docker守护进程响应阻塞,最终出现访问/dags目录无响应、容器健康检查超时的问题
  • Airflow 2.1.0自带的docker-compose配置默认开启了DAG目录的文件监听轮询,在Windows/macOS环境下使用Docker Desktop的共享文件系统挂载时,容易触发文件系统缓存死锁,导致DAG更新不生效、目录访问卡死
  • 第二次执行docker-compose up airflow-init卡死是因为首次运行后产生的残留元数据、未清理的临时挂载和锁文件没有被清除,init进程无法获取对应资源的操作权限
解决方案

1. 修复版本兼容问题

更新你的自定义Dockerfile,替换有bug的provider版本:

FROM apache/airflow:2.1.0
# 升级到无挂载泄露bug的最低稳定版本
RUN pip install apache-airflow-providers-docker==2.1.0

如果可以接受升级Airflow核心版本,建议直接升级到2.2.5以上的LTS版本,能同时规避大量已知的docker-compose部署bug。

2. 调整docker-compose.yml配置

打开你使用的官方docker-compose.yml文件,修改以下参数:

  • 在x-airflow-common的environment节点下添加配置关闭不必要的文件监听:
    AIRFLOW__SCHEDULER__DAG_DIR_LIST_INTERVAL: 30
    AIRFLOW__SCHEDULER__DAG_DIR_LIST_REQUEST_TIMEOUT: 60
    AIRFLOW__CORE__DAG_FILE_PROCESSOR_TIMEOUT: 120
    # 关闭文件变更监听,改用定时扫描,避免共享文件系统死锁
    AIRFLOW__CORE__DAG_DISCOVERY_SAFE_MODE: "False"
    
  • 检查dags目录的挂载配置,确保你本地的dags目录权限设置为755,避免权限不足导致的扫描卡死。

3. 清理残留资源后重新启动

执行以下命令清理所有残留资源,避免重启后残留问题复现:

# 停止所有运行中的Airflow容器并删除挂载卷
docker-compose down -v
# 清理Docker僵尸挂载和临时资源
docker system prune -f
# 重新构建自定义镜像
docker-compose build
# 执行初始化
docker-compose up airflow-init
# 后台启动所有服务
docker-compose up -d

4. 临时应急修复(无需重启Docker)

如果后续再出现/dags目录无响应、容器unhealthy的情况,不需要重启整个Docker,执行以下命令即可恢复:

docker restart $(docker ps -q --filter "name=airflow")
docker system prune --volumes -f

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 04:18:03