Apache Airflow:如何使用另一个任务中的环境变量运行Docker操作符?

Apache Airflow:如何使用另一个任务中的环境变量运行Docker操作符?,docker,airflow,airflow-operator,apache-airflow-xcom,Docker,Airflow,Airflow Operator,Apache Airflow Xcom,我想在Airflow中运行Docker操作符,使用在上一个任务中设置的环境变量download\u path。我怎样才能做到这一点?通过Xcom? 最简单的例子: #定义python函数 def make_文件夹(文件夹路径:str,日期:str): 下载路径=文件夹路径+日期 返回(下载路径) os.mkdir(下载路径) #Python运算符 task_1=蟒蛇算子( task\u id=“制作文件夹”, 提供上下文=False, python\u callable=make\u文件夹, o

我想在Airflow中运行Docker操作符,使用在上一个任务中设置的环境变量download\u path。我怎样才能做到这一点?通过Xcom? 最简单的例子:

#定义python函数
def make_文件夹(文件夹路径:str,日期:str):
下载路径=文件夹路径+日期
返回(下载路径)
os.mkdir(下载路径)
#Python运算符
task_1=蟒蛇算子(
task\u id=“制作文件夹”,
提供上下文=False,
python\u callable=make\u文件夹,
op_kwargs={'folder_path':'/my_path','date':'str(datetime.date(datetime.today())'),
xcom_push=True,
xcom\u all=True
)
#download_path作为必要环境变量的docker运算符
任务2=DockerRoperator(
任务_id='docker',
image='file\u处理器:最新',
api_version='auto',
自动删除=错误,
命令=“”,
环境={
“DPATH”:**下载路径**
},
docker_url=”unix://var/run/docker.sock",
网络模式=“网桥”,
xcom_push=True,
xcom\u all=True
)
任务1>>任务2

是的,您需要使用Xcom。试试这个:

task_2 = DockerOperator(
                task_id='docker',
                image='file_processor:latest',
                api_version='auto',
                auto_remove=False,
                command='',
                environment={
                        'DPATH': '{{ti.xcom_pull(task_ids='make_folder') }}'
                },
                docker_url="unix://var/run/docker.sock",
                network_mode="bridge",
                xcom_push=True,
                xcom_all=True
)
如果上述操作不起作用,请将上一个任务(make_文件夹)的任务id传递给操作员,并尝试从此处提取:

context['ti'].xcom_pull(prev_task_id)

您确实可以使用
xcom
task\u实例
对象为此提供了两种方法:
xcom\u推送
xcom\u拉送

要将值推送到
xcom
,需要为“python协作”函数提供上下文。这将使函数可以访问
task\u实例
对象

DockerOperator
environment
字段已模板化。这意味着它支持。您可以使用
{{task\u instance}}

def make_文件夹(文件夹路径:str,日期:str,**上下文):
下载路径=文件夹路径+日期
os.mkdir(下载路径)
task\u instance=context['task\u instance']
task\u instance.xcom\u push(key=“download\u path”,value=download\u path)
task_1=蟒蛇算子(
task\u id=“制作文件夹”,
提供上下文=True,
python\u callable=make\u文件夹,
op_kwargs={'folder_path':'/my_path','date':'str(datetime.date(datetime.today())')}
)
任务2=DockerRoperator(
任务_id='docker',
image='file\u处理器:最新',
api_version='auto',
自动删除=错误,
命令=“”,
环境={
'DPATH':“{{task\u instance.xcom\u pull(task\u id='make\u folder',key='download\u path')}”
},
docker_url=”unix://var/run/docker.sock",
网络模式=“网桥”
)
任务1>>任务2