You need to enable JavaScript to run this app. docker-compose部署Airflow配置PostgreSQL仍访问SQLite报错
优惠活动
大模型
产品
解决方案
定价
更多

docker-compose部署Airflow配置PostgreSQL仍访问SQLite报错

核心问题定位
  • docker-compose锚点合并机制踩坑,公共环境变量被子级配置完全覆盖
    docker-compose使用yaml锚点合并配置时,序列类型的字段(比如列表形式的environment)不会做元素级合并,子服务的同名配置会完全覆盖公共锚点的配置内容。
    你在airflow-init、airflow-webserver、airflow-scheduler服务中都单独定义了列表形式的environment字段,直接把x-airflow-common里定义的所有公共环境变量(包括正确的AIRFLOW__CORE__SQL_ALCHEMY_CONN连接配置)全部覆盖替换掉了。最终这几个服务启动时根本没读到你在公共部分配置的Postgres连接参数,只能用镜像内置的默认sqlite元数据库配置,自然会报sqlite找不到表的错误。
  • 配置文件挂载路径拼写错误
    你在volumes配置中,将容器内的airflow.cfg路径写为/opt/airlfow/airflow.cfg(把airflow错拼为airlfow),这个路径不是Airflow读取配置的正确路径,自定义配置文件根本不会生效,属于无效挂载。
  • 环境变量命名不符合Airflow读取规则
    你在子服务中单独添加的SQL_ALCHEMY_CONN变量,没有遵循Airflow要求的环境变量命名规范(AIRFLOW__<配置节>__<配置键>),属于Airflow完全无法识别的无效配置,不会对元数据库连接产生任何影响。
  • 冗余无效配置
    AIRFLOW_CONN_METADATA_DB是用于创建业务自定义连接的参数,和Airflow本身的元数据库配置没有任何关联,设置这个参数不会改变元数据库的连接地址,属于无意义的冗余配置。
  • 无效的Postgres环境变量
    给db服务设置的POSTGRES_PORT=9501不是官方Postgres镜像支持识别的配置项,不会对Postgres的端口产生任何实际影响,你的端口配置实际是靠command里的-p 9501生效的,这个变量可以直接删掉。
修正后的可运行docker-compose.yml配置
version: '3'
x-airflow-common:
  &airflow-common
  image: apache/airflow:2.0.0
  environment:
    - AIRFLOW__CORE__EXECUTOR=LocalExecutor
    - AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://postgres:postgres@db:9501/airflow
    - AIRFLOW__CORE__FERNET_KEY=FB0o_zt4e3Ziq3LdUUO7F2Z95cvFFx16hU8jTeR1ASM=
    - AIRFLOW__CORE__LOAD_EXAMPLES=True
    - AIRFLOW__CORE__LOGGING_LEVEL=INFO
  volumes:
    - /home/x/docker/airflow/dags:/opt/airflow/dags
    - /home/x/docker/airflow/airflow-data/logs:/opt/airflow/logs
    - /home/x/docker/airflow/airflow-data/plugins:/opt/airflow/plugins
    # 仅当需要自定义airflow.cfg时才开启挂载,注意必须使用正确的容器内路径
    # - /home/x/docker/airflow/airflow-data/airflow.cfg:/opt/airflow/airflow.cfg
  depends_on:
    - db

services:
  db:
    image: postgres:12
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=airflow
      - POSTGRES_HOST_AUTH_METHOD=trust
    ports:
      - 9501:9501
    command:
      - -p 9501

  airflow-init:
    << : *airflow-common
    container_name: airflow_init
    entrypoint: /bin/bash
    command:
      - -c
      - airflow db init &&
        airflow users create
          --role Admin
          --username airflow
          --password airflow
          --email airflow@airflow.com
          --firstname airflow
          --lastname airflow
    restart: on-failure

  airflow-webserver:
    << : *airflow-common
    command: airflow webserver
    ports:
      - 9500:8080
    container_name: airflow_webserver
    restart: always

  airflow-scheduler:
    << : *airflow-common
    command: airflow scheduler
    container_name: airflow_scheduler
    restart: always
启动前必做检查
  • 先执行docker-compose down -v清空之前错误配置生成的残留容器、数据卷、网络,避免旧的sqlite配置缓存影响
  • 确认Postgres服务完全启动后,Airflow相关服务会自动等待连接重试,不需要额外增加延迟脚本
  • 所有配置统一在x-airflow-common的公共区域定义,不要在子服务中单独添加重复的environment列表,避免触发配置覆盖问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 11:54:09