【问题标题】:Need to access schedule time in DockerOperator in Airflow需要在 Airflow 中访问 DockerOperator 中的调度时间
【发布时间】:2019-01-07 13:16:58
【问题描述】:

需要在气流的 docker 操作员中访问计划时间。例如

t1 = DockerOperator(
task_id="task",
dag=dag,
image="test-runner:1.0",
docker_url="xxx.xxx.xxx.xxx:2376",
environment={"FROM": "{{(execution_date + macros.timedelta(hours=6,minutes=(30))).isoformat()}}"})

基本上,我需要将调度时间填充为 docker 环境。

【问题讨论】:

标签: python docker airflow airflow-scheduler


【解决方案1】:

第一个宏仅在它是模板字段时才有效。其次,您需要检查您使用的是哪个版本的气流,如果您使用的是 1.9 或更低版本,它可能不适用于评论中@tobi6 提到的 DockerOperator,因为 template_fields 仅包含命令 (https://github.com/apache/incubator-airflow/blob/v1-9-stable/airflow/operators/docker_operator.py#L91)
但是,DockerOperator 的 1.10 稳定添加环境。 https://github.com/apache/incubator-airflow/blob/v1-10-stable/airflow/operators/docker_operator.py#L103

【讨论】:

  • 查看描述如何扩展模板化字段的新答案
【解决方案2】:

正如其他海报所提到的,Airflow 1.9 中的 DockerOperator 只期望 command 字段被模板化,但修改 Operator 上的可模板化字段相当简单。

from airflow.operators import DockerOperator
DockerOperator.template_fields = (command, environment)

然后你就可以像往常一样实例化你的操作符了。

【讨论】:

  • 所以这一行,你会添加到 DAG 的顶部吗?还是这是在函数内部?
  • DAG 文件上的全局
【解决方案3】:

快速更新:)

DockerOperator的环境和命令参数可以模板化。 我发了一篇文章:https://marclamberti.com/blog/how-to-use-dockeroperator-apache-airflow/

另外,不要犹豫,看看源代码,看看哪个参数可以模板化:https://github.com/apache/airflow/blob/master/airflow/operators/docker_operator.py 祝你有美好的一天

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多