Docker 上的气流:无法写入卷(权限被拒绝)

Airflow on Docker: Can't Write to Volume (Permission Denied)

目标

我正在尝试 运行 一个简单的 DAG,它创建一个 pandas DataFrame 并写入一个文件。 DAG 运行 在带有 Airflow 的 Docker 容器中,文件正在写入命名卷。

问题

当我启动容器时,出现错误:

Broken DAG: [/usr/local/airflow/dags/simple_datatest.py] [Errno 13] Permission denied: '/usr/local/airflow/data/local_data_input.csv'

问题

为什么会出现此错误?我该如何解决这个问题才能正确写入?

上下文

我大致遵循教程 here,但我修改了 DAG。我正在使用来自 Docker Hub 的 puckel/docker-airflow 图片。我附加了一个指向适当 DAG 的卷,并且创建了另一个卷来包含写入 DAG 中的数据(由 运行ning docker volume create airflow-data 创建)。

运行命令是:

docker run -d -p 8080:8080 \
-v /path/to/local/airflow/dags:/usr/local/airflow/dags \
-v airflow-data:/usr/local/airflow/data:Z \
puckel/docker-airflow \
webserver

容器上/usr/local/airflow/dags路径下的DAG定义如下:

import airflow
from airflow import DAG
from airflow.operators import BashOperator
from datetime import datetime, timedelta
import pandas as pd

# Following are defaults which can be overridden later on
default_args = {
    'owner': 'me',
    'depends_on_past': False,
    'start_date': datetime(2021, 12, 31),
    'email': ['me@example.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=1),
}

dag = DAG('datafile', default_args=default_args)

def task_make_local_dataset():
  print("task_make_local_dataset")
  local_data_create=pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})
  local_data_create.to_csv('/usr/local/airflow/data/local_data_input.csv')

t1 = BashOperator(
    task_id='write_local_dataset',
    python_callable=task_make_local_dataset(),
    bash_command='python3 ~/airflow/dags/datatest.py',
    dag=dag)

DAG 中的错误似乎在行

local_data_create.to_csv('/usr/local/airflow/data/local_data_input.csv')

我没有写入此位置的权限。

尝试次数

我试过更改 data 目录在容器上的位置,但 airflow 无法访问它。我必须更改权限吗?看起来这是一件非常简单的事情,大多数人都希望能够做到:写入容器。我猜我只是错过了一些东西。

不要使用 Puckel Docker 图片。它已经多年没有维护了,Airflow 1.10 已于 2021 年 6 月结束。您应该只看 Airflow 2,Airflow 有官方参考图片可以使用:

A​​irflow 2 也有您可以使用的快速入门指南 - 基于图像和 docker 撰写:https://airflow.apache.org/docs/apache-airflow/stable/start/index.html

它还有 Helm Chart,可用于生产您的设置。 https://airflow.apache.org/docs/helm-chart/stable/index.html

不要在 Puckel 和 Airflow 1.10 上浪费您(和其他人)的时间。