【发布时间】: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