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

首次基于Airflow+Docker搭建ML项目:Flask用户创建失败及404报错求助

问题:Airflow+Docker搭建ML项目时Flask用户未创建,UI报404错误

首次在IntelliJ中用Airflow和Docker搭建机器学习项目,遇到Flask用户未创建的警告,同时Airflow UI弹出404错误。以下是相关配置代码及报错日志:

Dockerfile代码

FROM puckel/docker-airflow:2.1.0
FROM apache/airflow:2.1.0
COPY requirement.txt .
RUN pip install -r requirement.txt

docker-compose.yml代码

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"

  webserver:
    build: ./dockerfiles
    restart: always
    depends_on:
      - postgres
    environment:
      - LOAD_EX=n
      - EXECUTOR=Local
    logging:
      options:
        max-size: 10m
        max-file: "3"
    volumes:
      - ./dags:/usr/local/airflow/dags
      - ./plugins:/usr/local/airflow/plugins

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

报错日志

project_p-webserver-1  | [2023-08-11 11:57:30,674] {manager.py:784} WARNING - No user yet created, use flask fab command to do it.
project_p-webserver-1  | [2023-08-11 11:57:30,677] {manager.py:784} WARNING - No user yet created, use flask fab command to do it.
project_p-webserver-1  | [2023-08-11 11:57:30,796] {manager.py:784} WARNING - No user yet created, use flask fab command to do it.
project_p-webserver-1  | [2023-08-11 11:57:30,804] {manager.py:784} WARNING - No user yet created, use flask fab command to do it.

解决步骤

1. 修复Dockerfile的多FROM错误

Dockerfile中连续两个FROM属于无效用法,第二个FROM apache/airflow:2.1.0会完全覆盖第一个镜像内容,直接删除第一个FROM即可:

FROM apache/airflow:2.1.0
COPY requirement.txt .
RUN pip install -r requirement.txt

2. 补充Airflow数据库连接环境变量

Airflow 2.x需要明确配置数据库连接信息,在webserver服务的environment中添加:

environment:
  - LOAD_EX=n
  - EXECUTOR=Local
  - AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres/airflow
  - AIRFLOW__WEBSERVER__EXPOSE_CONFIG=True

3. 修正Airflow文件路径

apache/airflow官方镜像的默认工作目录是/opt/airflow,而非/usr/local/airflow,需修改挂载路径和健康检查路径:

volumes:
  - ./dags:/opt/airflow/dags
  - ./plugins:/opt/airflow/plugins
  - ./logs:/opt/airflow/logs  # 新增日志目录挂载,避免权限问题

healthcheck:
  test: ["CMD-SHELL", "[ -f /opt/airflow/airflow-webserver.pid ]"]

4. 添加数据库初始化和用户创建逻辑

Airflow 2.x需要手动初始化数据库并创建用户,可通过两种方式实现:

方式一:新增初始化服务(推荐生产环境)

在docker-compose.yml中添加init服务,负责一次性完成初始化:

services:
  # ... 保留原有postgres、webserver服务 ...
  init:
    build: ./dockerfiles
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      - AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres/airflow
    command: >
      bash -c "airflow db init &&
               airflow users create \
                 --username admin \
                 --firstname Admin \
                 --lastname User \
                 --role Admin \
                 --email admin@example.com \
                 --password admin"

启动顺序:先执行docker-compose run init,再运行docker-compose up -d。

方式二:修改webserver启动命令(适合测试环境)

将webserver的command改为先初始化再启动webserver:

command: >
  bash -c "airflow db init &&
           airflow users create \
             --username admin \
             --firstname Admin \
             --lastname User \
             --role Admin \
             --email admin@example.com \
             --password admin &&
           airflow webserver"

5. 确保Postgres服务就绪

depends_on仅保证启动顺序,需添加健康检查确保Postgres就绪:

postgres:
  image: postgres:9.6
  environment:
    - POSTGRES_USER=airflow
    - POSTGRES_PASSWORD=airflow
    - POSTGRES_DB=airflow
  logging:
    options:
      max-size: 10m
      max-file: "3"
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U airflow"]
    interval: 10s
    timeout: 5s
    retries: 5

同时修改webserver和init服务的depends_on:

depends_on:
  postgres:
    condition: service_healthy

内容的提问来源于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:04:56