docker - 如何在气流中运行 bash 脚本?我需要将它们保存在哪个文件夹中?
问题描述
我最近开始使用 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
知道如何解决这个问题吗?我使用香草气流,或者我也可以使用码头气流。
解决方案
请检查您的基本文件系统如何映射到 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 文件中的文件位置,您的代码应该可以工作。
推荐阅读
- android - 将上下文传递给单例类的最佳方法是什么
- mongodb - PyMongo 导入时出现空字节错误
- python - Python3 日期和时间格式
- javascript - D3.js Sankey图:在每列节点上方添加标题(文本)
- r - 使用 Gamma 分布编写收入函数
- python - 使用 pandas 将新行添加和迭代到空数据帧以进行聚类
- mobile - 使用首选项的简单高分(Lua - Corona SDK)
- kubernetes - Terraform:如何使用命名空间在 Google Cloud (GKE) 上创建 Kubernetes 集群?
- wpf - 当已经是英国时,日期选择器格式化为英国格式
- html - HTML将图像高度拉伸到调整内容大小的父div?