我最近开始使用Docker气流(puckel / docker-airflow),这给了我噩梦。
我想使用BashOperator运行bash脚本。但是在运行时找不到脚本位置。
这是我的代码:
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta
import os
default_args = {
"owner": "airflow",
"depends_on_past": False,
"start_date": datetime(2015, 6, 1),
"email": ["airflow@airflow.com"],
"email_on_failure": False,
"email_on_retry": False,
"retries": 1,
"retry_delay": timedelta(minutes=5),
# 'queue': 'bash_queue',
# 'pool': 'backfill',
# 'priority_weight': 10,
# 'end_date': datetime(2016, 1, 1),
}
dag = DAG("ranks", default_args=default_args, schedule_interval=timedelta(1))
t1 = BashOperator(task_id="execution_rights", bash_command="chmod +x /Users/konradburchardt/airflow/dags/rank.sh ", dag=dag)
file = '/Users/konradburchardt/airflow/dags/rank.sh '
t2 = BashOperator(task_id= 'rank_check',bash_command=file,dag=dag)
t3 = BashOperator(task_id="Step_2", bash_command="echo ' Step 2 Complete' ", dag=dag)
t1 >> t2 >> t3
[2019-08-11 21:15:35,115] {bash_operator.py:105} INFO - Temporary script location: /var/folders/56/0x5zxzq119b6wn0j_cchfzxw0000gn/T/airflowtmp4rarv7mk/create_filegzb7c3by
[2019-08-11 21:15:35,115] {bash_operator.py:115} INFO - Running command: /Users/konradburchardt/airflow/dags/rank.sh
[2019-08-11 21:15:35,126] {bash_operator.py:124} INFO - Output:
[2019-08-11 21:15:35,131] {bash_operator.py:128} INFO - /var/folders/56/0x5zxzq119b6wn0j_cchfzxw0000gn/T/airflowtmp4rarv7mk/create_filegzb7c3by: line 1: /Users/konradburchardt/airflow/dags/rank.sh: No such file or directory
[2019-08-11 21:15:35,132] {bash_operator.py:132} INFO - Command exited with return code 127
[2019-08-11 21:15:35,140] {taskinstance.py:1047} ERROR - Bash command failed
关于如何解决这个问题的任何想法?我正在使用 Vanilla 气流,或者我也可以使用 docker 气流。
最佳答案
请检查您的基本文件系统如何映射到docker文件夹
使用docker ps
获取容器ID。
然后docker inspect -f '{{ .Mounts }}' containerid
示例:输出
map[/usr/tmp:/tmp]
同样,找到dag文件夹
/Users/konradburchardt/airflow/dags
在docker上的安装位置。如果未安装文件夹,请使用
例如,使用
docker-compose
,足以添加以下内容:volumes:
- /path/source/on/host:/path/destination/on/container
更新dag文件中的文件位置,您的代码应该可以正常工作。
关于docker - 如何在 Airflow 中运行bash脚本?我需要将它们保存在哪个文件夹中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57451510/