问题描述
在某些远程气流实例中,有一堆破擦和相关的气流变量,这些副本正在我的本地系统中运行。来自远程气流实例的所有变量都导入到我的本地气流实例中。
我已经在docker顶部安装了气流图像,然后启动了容器。一切正常,我可以从本地系统访问气流UI。
问题: 每当我重新启动气流容器时,在上一个容器运行期间导入的所有变量都会像这样无效。
变通 再次导入变量以修复变量相关的错误。
但是,每次容器启动时导入变量确实令人沮丧。必须有一种明智的方法来实现这一目标。请帮助我了解我在做什么错。
解决方法
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个选项:
- 在airflow.cfg中明确设置
fernet_key
- Set the
AIRFLOW__CORE__FERNET_KEY
Environment Variable in docker-compose.yml - 将
is_encrypted
属性设置为False
(Admin UI,CLI,update sql query,...)
我个人选择了第二个文件,因此我的docker-compose.yml
文件看起来像这样:
environment:
- LOAD_EX=n
- EXECUTOR=Local
- AIRFLOW__CORE__FERNET_KEY='81HqDtbqAywKSOumSha3BhWNOdQ26slT6K0YaZeZyPs='