【问题标题】:Value of Airflow variable gets invalid on restarting docker containerAirflow 变量的值在重新启动 docker 容器时变得无效
【发布时间】:2020-09-08 07:13:58
【问题描述】:

在某些远程气流实例中有一长串 dag 和相关的气流变量,其副本正在我的本地系统中运行。来自远程气流实例的所有变量都被导入到我的本地气流实例中。

我在 docker 上安装了气流图像,然后启动了容器。一切正常,我可以从本地系统访问气流 UI。

问题: 每当我重新启动气流容器时,在前一个容器运行期间导入的所有变量都会像这样无效。

解决方法 再次导入变量,修复变量相关错误。

但是,每次容器启动时都导入变量真的很令人沮丧。必须有一种智能的方法来实现这一点。请帮助我理解我做错了什么。

【问题讨论】:

  • 您是否使用SQLite?如是;确保 SQLite 存储目录 [1] 正确安装在您的 docker 容器上 [2] 具有适当的权限
  • 对,我可以在气流配置文件中看到像“sql-alchemy....”这样的变量。例如,sql_alchemy_pool_size、sql_alchemy_pool_recycle、sql_alchemy_pool_enabled 等。它的文件真的很长,我不知道它到底是做什么的?

标签: python docker airflow


【解决方案1】:

docker 容器重启时会生成新的加密密钥。

为确保使用相同的加密密钥,您必须在配置文件中硬编码 FERNET_KEY 或在容器初始运行时传递 env 变量。

docker run -it -p 8888:8080 -v D:\dev\Dags:/usr/local/airflow/dags -e FERNET_KEY=81HqDtbqAywKSOumSha3BhWNOdQ26slT6K0YaZeZyPs= --name my_airflow_dags airflow_image

这里的 Fernet 密钥可以是任何东西。一旦提供了这个 key,docker 就可以在每次容器重启时重复使用这个 key。

【讨论】:

    【解决方案2】:

    此问题的根本原因是AirFlow Encryption Mechanism for the Key-value Variables。 当您手动导入变量时,它们的is_encrypted 属性会自动设置为True

    每当您重新启动容器时,都会生成新的加密密钥,因此旧的得到Invalid

    您有 3 个选项:

    我个人选择了第二个,所以我的docker-compose.yml文件是这样的:

           environment:
               - LOAD_EX=n
               - EXECUTOR=Local
               - AIRFLOW__CORE__FERNET_KEY='81HqDtbqAywKSOumSha3BhWNOdQ26slT6K0YaZeZyPs='
    

    感谢wittfabian

    【讨论】:

      猜你喜欢
      • 2020-01-21
      • 2015-02-07
      • 2015-03-23
      • 2016-12-08
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      相关资源
      最近更新 更多