重启Docker容器后,Airflow变量的值变得无效。

3

在远程airflow实例中,有一个长列表的dag和相关的airflow变量,其中一份拷贝运行在我的本地系统上。从远程airflow实例导入所有变量到我的本地airflow实例。

我在docker上安装了airflow镜像,并启动了容器。一切正常,我可以从本地系统访问airflow UI。

问题: 每当我重新启动airflow容器时,之前导入的所有变量都会失效,如下所示。 enter image description here

解决方法: 再次导入变量以解决与变量相关的错误。

然而,每次容器启动时导入变量真的很烦人。必须有一种智能的方法来解决这个问题。请帮助我理解我做错了什么。


你是否在使用 SQLite?如果是,请确保 SQLite 存储目录已经正确挂载到你的 Docker 容器上,并且具有适当的权限。 - y2k-shubham
我能在Airflow配置文件中看到像"sql-alchemy...."这样的变量。例如,sql_alchemy_pool_size、sql_alchemy_pool_recycle、sql_alchemy_pool_enabled等。虽然这个文件非常长,但我不知道它具体是做什么的? - Sarvesh Pandey
2个回答

3
这个问题的根本原因是Key-value变量的AirFlow加密机制。当您手动导入变量时,它们的is_encrypted属性会自动设置为True
每当您重新启动容器时,都会生成新的加密密钥,因此旧密钥会变为无效您有3个选择: 我个人选择了第二种方法,所以我的docker-compose.yml文件看起来像这样:
       environment:
           - LOAD_EX=n
           - EXECUTOR=Local
           - AIRFLOW__CORE__FERNET_KEY='81HqDtbqAywKSOumSha3BhWNOdQ26slT6K0YaZeZyPs='

感谢wittfabian

2
当 Docker 容器重新启动时,会生成新的加密密钥。
为确保使用相同的加密密钥,您需要在配置文件中硬编码 FERNET_KEY 或在容器最初运行时传递环境变量。
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可以在每次重新启动容器时重复使用相同的密钥。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接