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

Python 重新启动docker容器时,Airflow变量的值无效,python,docker,airflow,airflow-operator,Python,Docker,Airflow,Airflow Operator,在气流的某个远程实例中有一长串DAG和相关气流变量,其副本正在我的本地系统中运行。远程气流实例中的所有变量都导入到本地气流实例中 我在docker顶部安装了气流图像,然后启动了容器。一切正常,我可以从本地系统访问airflow UI 问题: 每当我重新启动airflow容器时,在上一个容器运行期间导入的所有变量都会像这样无效。 解决问题 再次导入变量以修复与变量相关的错误 然而,每次容器启动时导入变量确实令人沮丧。必须有一种明智的方法来实现这一点。请帮助我了解我做错了什么。此问题的根本原因是。

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

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

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

解决问题 再次导入变量以修复与变量相关的错误


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

此问题的根本原因是。 手动导入变量时,变量的
已加密
属性将自动设置为
True

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

您有3个选项:

  • 在afflow.cfg中明确设置
    fernet_键
  • is_encrypted
    属性设置为
    False
    ()
我个人选择了第二个,因此我的
docker compose.yml
文件如下所示:

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

由于

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

为了确保使用相同的加密密钥,您必须在配置文件中硬编码FERNET_密钥,或者在容器最初运行时传递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可以在每次重新启动容器时重复使用相同的密钥。

您是否正在使用
SQLite
?若有,;确保SQLite存储目录[1]正确安装在docker容器上[2]具有正确的权限。我可以在配置文件中看到类似“sql alchemy…”的变量。例如,sql炼金术池大小、sql炼金术池回收、sql炼金术池启用等等。虽然它的文件很长,但我不知道它到底做了什么?