【问题标题】:Airflow on Docker: Can't Write to Volume (Permission Denied)Docker 上的气流:无法写入卷(权限被拒绝)
【发布时间】:2022-01-01 19:02:28
【问题描述】:

目标

我正在尝试运行一个简单的 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 中的数据(通过运行 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 目录的位置,但气流无法访问它。我必须更改权限吗?似乎这是大多数人都希望能够做的一件非常简单的事情:写入容器。我猜我只是错过了一些东西。

【问题讨论】:

    标签: linux docker airflow permission-denied


    【解决方案1】:

    不要使用 Puckel Docker 镜像。多年未维护,Airflow 1.10 已于 2021 年 6 月结束生命周期。您应该只看 Airflow 2,并且 Airflow 有可以使用的官方参考图像:

    Airflow 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 上浪费您(和其他人)的时间。

    【讨论】:

    • 谢谢!很难知道哪些图像是最好的(甚至可以互换)。我遵循了 Apache 快速入门,它肯定比 Puckel 涉及更多的资源/容器。但很高兴知道这是正确的使用方法。
    猜你喜欢
    • 1970-01-01
    • 2021-11-05
    • 2019-11-13
    • 2021-03-28
    • 1970-01-01
    • 2017-01-16
    • 2020-10-23
    • 2021-01-09
    • 1970-01-01
    相关资源
    最近更新 更多