重新启动docker容器时,Airflow变量的值变得无效

问题描述

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

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

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

enter image description here

变通 再次导入变量以修复变量相关的错误

但是,每次容器启动时导入变量确实令人沮丧。必须有一种明智的方法来实现这一目标。请帮助我了解我在做什么错。

解决方法

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 键可以是任何东西。提供此密钥后,docker 可以在每次容器重新启动时重复使用相同的密钥。

,

此问题的根本原因是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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...