【问题标题】:How to add airflow variables in docker compose file?如何在 docker compose 文件中添加气流变量?
【发布时间】:2021-11-22 15:34:32
【问题描述】:

我有一个 docker compose 文件,它可以启动本地气流实例,如下所示:

version: '3.7'
services:
    postgres:
        image: postgres:9.6
        environment:
            - POSTGRES_USER=airflow
            - POSTGRES_PASSWORD=airflow
            - POSTGRES_DB=airflow
        logging:
            options:
                max-size: 10m
                max-file: "3"

    webserver:
        image: puckel/docker-airflow:1.10.6
        restart: always
        depends_on:
            - postgres
        environment:
            - LOAD_EX=n
            - EXECUTOR=Local
            - FERNET_KEY=46BKJoQYlPPOexq0OhDZnIlNepKFf87WFwLbfzqDDho=
        logging:
            options:
                max-size: 10m
                max-file: "3"
        volumes:
            - ./dags:/usr/local/airflow/dags
            - ${HOME}/.aws:/usr/local/airflow/.aws
        ports:
            - "8080:8080"
        command: webserver
        healthcheck:
            test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
            interval: 30s
            timeout: 30s
            retries: 3

我想添加一些底层 dag 使用的 Airflow 变量,例如:CONFIG_BUCKET。 我已将它们添加为 AIRFLOW_VAR_CONFIG_BUCKET=s3://foo-bucket 在 web 服务器的环境部分,但它似乎不起作用。有什么想法可以实现吗?

【问题讨论】:

    标签: docker airflow


    【解决方案1】:

    您不应该将变量添加到网络服务器,而是添加到调度程序。如果您使用的是 LocalExecutor,则任务将在 Scheduler 的上下文中运行。

    实际上,你真正应该做的是将所有 env 变量设置为对所有容器都相同(此处解释为 https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html

    在所有 Airflow 组件中使用相同的配置。虽然每个组件都不需要全部,但某些配置需要相同,否则它们将无法按预期工作。一个很好的例子是 secret_key 应该在 Webserver 和 Worker 上相同,以允许 Webserver 从 Worker 获取日志。

    您可以通过多种方式做到这一点 - 只需阅读 https://docs.docker.com/compose/environment-variables 上的 docker-compose 文档即可。您还可以从我们使用锚点的 Airflow 文档中查看“快速入门” docker compose - 这是一种更复杂的方式 https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html

    请注意,“快速入门”应该只是灵感,它与生产设置相去甚远,如果您想制作自己的 docker compose,您需要真正深入了解 docker compose - 正如注释中所警告的那样在我们的文档中。

    【讨论】:

      【解决方案2】:

      如果您将名为AIRFLOW_VAR_CONFIG_BUCKET 的环境变量添加到environment: 下的列表中,Airflow 应该可以访问它。听起来你做得对。

      需要注意的两点:

      • 通过环境变量设置的变量(和连接)在 Airflow UI 中可见。您可以通过在代码中执行Variable.get("config_bucket") 来测试它们是否存在。
      • Airflow 调度程序/工作程序(取决于 Airflow 执行程序)在运行任务时需要访问变量。不需要向网络服务器添加变量。

      【讨论】:

      • 它似乎没有启动,因为它说变量 'config_bucket' 不存在
      • 你是如何(重新)启动 Docker 镜像的?对环境变量的更改仅在完全停止/启动后显示,而不是在单个服务重新启动后显示。
      • 我使用 docker compose up 和 docker compose down 来启动/停止服务
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多