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

如何用Docker Compose运行Airflow 1.10.14及权限问题排查

问题

为维护遗留项目需部署Airflow 1.10.14,因本地安装易引发系统依赖冲突,选择Docker Compose部署。该版本无官方docker-compose.yaml,自行编写配置后,运行docker-compose up时持续报错:

Unable to configure handler 'processor': [Errno 13] Permission denied: '/opt/airflow/logs/scheduler'

已尝试生成.env文件(内容如下),但问题未解决:

AIRFLOW_UID=1004
AIRFLOW_GID=0

自行编写的docker-compose.yaml配置:

version: '3'
x-airflow-common:
  &airflow-common
  image: apache/airflow:1.10.14
  environment:
    - AIRFLOW__CORE__EXECUTOR=CeleryExecutor
    - AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres/airflow
    - AIRFLOW__CELERY__RESULT_BACKEND=db+postgresql://airflow:airflow@postgres/airflow
    - AIRFLOW__CELERY__BROKER_URL=redis://:@redis:6379/0
    - AIRFLOW__CORE__FERNET_KEY=FB0o_zt4e3Ziq3LdUUO7F2Z95cvFFx16hU8jTeR1ASM=
    - AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION=True
  volumes:
    - ./dags:/opt/airflow/dags
    - ./airflow-data/logs:/opt/airflow/logs
    - ./airflow-data/plugins:/opt/airflow/plugins
  depends_on:
    redis:
      condition: service_healthy
    postgres:
      condition: service_healthy

services:
  postgres:
    image: postgres:9.5
    environment:
      POSTGRES_USER: airflow
      POSTGRES_PASSWORD: airflow
      POSTGRES_DB: airflow
    volumes:
      - ./airflow-data/postgres-db-volume:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "airflow"]
      interval: 30s
      retries: 5
    restart: always

  redis:
    image: redis:latest
    ports:
      - 6379:6379
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 30s
      retries: 50
    restart: always

  airflow-webserver:
    << : *airflow-common
    user: "airflow"
    command: webserver
    ports:
      - 8080:8080
    healthcheck:
      test: ["CMD", "curl", "--fail", "http://localhost:8080/health"]
      interval: 10s
      timeout: 10s
      retries: 5
    restart: always

  airflow-scheduler:
    << : *airflow-common
    user: "airflow"
    command: scheduler
    restart: always

  airflow-worker:
    << : *airflow-common
    user: "airflow"
    command: worker
    restart: always

  airflow-init:
    << : *airflow-common
    entrypoint: /bin/bash
    user: "airflow"
    command:
      - -c
      - airflow list_users || (
        airflow initdb &&
        airflow create_user
        --role Admin
        --username airflow
        --password airflow
        --email airflow@airflow.com
        --firstname airflow
        --lastname airflow
        )
    restart: on-failure

  flower:
    << : *airflow-common
    user: "airflow"
    command: flower
    ports:
      - 5555:5555
    healthcheck:
      test: ["CMD", "curl", "--fail", "http://localhost:5555/healthcheck"]
      interval: 10s
      timeout: 10s
      retries: 5
    restart: always

操作环境:Ubuntu,拥有sudo权限,Python 3.8,Docker新手。询问问题原因及是否应放弃Docker改用本地安装。

解决方案与分析

问题原因

  1. 配置中硬编码了user: "airflow",未引用.env中的AIRFLOW_UID/AIRFLOW_GID变量,导致容器内airflow用户无法访问本地挂载的目录
  2. 本地挂载的logs等目录权限未与容器内用户权限匹配,引发读写权限拒绝
  3. Airflow 1.10.x镜像默认airflow用户UID为50000,若本地UID不匹配且未做映射,会出现权限冲突

修复步骤

  1. 清理现有容器与残留数据

    docker-compose down -v
    

    -v参数会删除关联的卷,避免旧权限数据残留

  2. 修改docker-compose.yaml配置
    将所有服务中的user: "airflow"替换为:

    user: "${AIRFLOW_UID:-50000}:${AIRFLOW_GID:-50000}"
    

    该配置会优先使用.env中的UID/GID,若未定义则使用镜像默认值,确保权限映射正确

  3. 设置本地目录权限
    手动调整本地挂载目录的所有者与权限,匹配.env中的UID/GID:

    sudo mkdir -p ./dags ./airflow-data/logs ./airflow-data/plugins ./airflow-data/postgres-db-volume
    sudo chown -R 1004:0 ./dags ./airflow-data/logs ./airflow-data/plugins
    sudo chmod -R 775 ./dags ./airflow-data/logs ./airflow-data/plugins
    
  4. 重新启动服务

    docker-compose up -d
    

是否放弃Docker?

绝对不建议。Airflow 1.10.14最高仅支持Python 3.7,而你的环境是Python 3.8,本地安装会出现严重的版本兼容性问题,还会污染系统依赖库,后续维护成本极高。Docker是隔离旧版本环境的最优方案,解决权限问题后即可稳定运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:07:39