在使用Airflow运行Docker容器时,可以选择将要执行的代码放在容器内部,也可以选择将代码放在本地文件中。下面是两种解决方法的示例:
from airflow import DAG
from airflow.operators.docker_operator import DockerOperator
from datetime import datetime
default_args = {
'start_date': datetime(2020, 1, 1)
}
dag = DAG('docker_example', default_args=default_args, schedule_interval=None)
task = DockerOperator(
task_id='docker_task',
image='my_docker_image:latest',
api_version='auto',
auto_remove=True,
command='python /app/my_script.py',
dag=dag
)
在上述示例中,我们使用了DockerOperator
来创建一个任务,将my_script.py
作为容器中的入口点执行。这样,Airflow将在容器中执行代码。
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime
default_args = {
'start_date': datetime(2020, 1, 1)
}
dag = DAG('local_example', default_args=default_args, schedule_interval=None)
task = BashOperator(
task_id='local_task',
bash_command='python /path/to/my_script.py',
dag=dag
)
在上述示例中,我们使用了BashOperator
来创建一个任务,直接在本地执行my_script.py
。这样,Airflow将在本地文件中执行代码。
需要注意的是,使用容器的好处是可以确保环境的一致性,并且可以将任务与其他任务分离。而使用本地文件的好处是可以更方便地进行调试和测试。
无论选择容器还是本地文件的方法,都可以根据实际需求选择适合的解决方案。