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

Airflow+Docker搭建ML项目遇SQLite log表缺失错误求助

问题诊断与修复方案

问题根源

  1. Dockerfile配置错误:使用了两个FROM指令,最终镜像基于apache/airflow:2.1.0,但未利用前一个puckel/docker-airflow镜像,且两类镜像的Airflow工作路径不统一(官方镜像默认路径为/opt/airflow,puckel镜像为/usr/local/airflow),导致挂载的dags、plugins目录无法被正确识别。
  2. 未配置PostgreSQL连接:docker-compose.yml中未设置Airflow连接PostgreSQL的核心环境变量,Airflow默认使用SQLite数据库,但该数据库未执行初始化迁移,因此出现no such table: log错误,进而引发Web服务404异常。

修复步骤

1. 修正Dockerfile

删除多余的FROM指令,统一使用官方Airflow镜像,并调整依赖安装路径:

FROM apache/airflow:2.1.0
COPY requirement.txt /opt/airflow/
WORKDIR /opt/airflow
RUN pip install --no-cache-dir -r requirement.txt

2. 更新docker-compose.yml

添加PostgreSQL连接配置,补充必要的Airflow环境变量,新增数据库初始化服务:

version: '3.7'

services:
  postgres:
    image: postgres:9.6
    environment:
      - POSTGRES_USER=airflow
      - POSTGRES_PASSWORD=airflow
      - POSTGRES_DB=airflow
    logging:
      options:
        max-size: 10m
        max-file: "3"
    volumes:
      - postgres-db-volume:/var/lib/postgresql/data  # 持久化数据库数据

  init-db:
    build: ./dockerfiles
    depends_on:
      - postgres
    environment:
      - AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres/airflow
      - AIRFLOW__CORE__EXECUTOR=LocalExecutor
    command: airflow db init

  webserver:
    build: ./dockerfiles
    restart: always
    depends_on:
      - init-db
      - postgres
    environment:
      - LOAD_EX=n
      - AIRFLOW__CORE__EXECUTOR=LocalExecutor
      - AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres/airflow
      - _AIRFLOW_WWW_USER_CREATE=true
      - _AIRFLOW_WWW_USER_USERNAME=airflow
      - _AIRFLOW_WWW_USER_PASSWORD=airflow
    logging:
      options:
        max-size: 10m
        max-file: "3"
    volumes:
      - ./dags:/opt/airflow/dags  # 匹配官方镜像的路径
      - ./plugins:/opt/airflow/plugins
      - ./logs:/opt/airflow/logs

    ports:
      - "8081:8080"
    command: webserver
    healthcheck:
      test: ["CMD-SHELL", "[ -f /opt/airflow/airflow-webserver.pid ]"]
      interval: 30s
      timeout: 30s
      retries: 3

volumes:
  postgres-db-volume:

3. 重新部署服务

执行以下命令清理旧容器并启动新服务:

docker-compose down -v
docker-compose build
docker-compose up -d

关键说明

  • 新增init-db服务专门负责初始化Airflow数据库,确保PostgreSQL中创建完整的表结构。
  • 统一使用官方镜像的/opt/airflow路径,避免路径不匹配导致的文件加载失败。
  • 通过AIRFLOW__CORE__SQL_ALCHEMY_CONN强制指定PostgreSQL作为元数据库,替代默认的SQLite。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:27:43