docker - 如何在 Airflow 中运行 bash 脚本?我需要将它们保存在哪个文件夹中?

标签 docker docker-compose airflow

我最近开始使用 Docker airflow (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 Airflow 或者我也可以使用 docker Airflow 。

最佳答案

请检查您的基本文件系统是如何映射到 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/

相关文章:

visual-studio - 在 Visual Studio 2019 中启动 Docker-compose 时无法启动调试适配器?

c++ - 已退出的 dockerized C++ Windows 控制台应用程序,代码为 3221225781

angular - 从 Angular 7 迁移到 12 后出现混合内容错误

docker - Reflex Golang与docker,docker-compose和makefile

airflow - Prometheus:如何根据任何 Airflow Dag 而不是特定 Airflow Dag 的结果创建警报

python - 在 Airflow 中创建动态工作流的正确方法

java - 仅针对特定机器在 docker 容器上接收运行时错误

docker - 如何使用挂载在主机和容器之间共享数据

docker - 在 docker 容器中安装 Sharp 时出错

python - 将 Airflow 宏 'ts' 转换为日期时间对象