Airflow如何在Docker容器中挂载airflow.cfg文件

7
我正在使用docker容器运行airflow,希望将我的airflow.cfg作为卷挂载,以便我可以快速编辑配置而不必重新构建镜像或直接在运行的容器中进行编辑。我已经成功地将airflow.cfg作为卷挂载,并且我的airflow Web服务器可以在启动时从中读取配置。但是,当我在主机上进行编辑时,更改不会反映在docker容器内。
在docker容器内运行findmnt -M airflow.cfg的输出如下:
TARGET                         SOURCE                                                             FSTYPE OPTIONS
/usr/local/airflow/airflow.cfg /dev/sda1[/host/path/airflow/airflow.cfg~//deleted]  ext4   rw,relatim

从输出结果来看,似乎airflow.cfg仍然指向原始未编辑版本的airflow.cfg。是否有任何解决方法可以允许从主机更新配置文件?

我使用来自puckel github repo的LocalExecutor compose文件作为基础。我在compose文件中修改它以挂载airflow.cfg,而不是在Dockerfile中复制它。


你修改后的docker-compose文件是什么样子?它应该能够正常工作,所以我猜测docker-compose文件中可能有些问题。我在我的docker-compose.yml文件中也做了同样的事情。在volumes:下面,它看起来像这样:local/path/to/airflow.cfg:/docker/path/to/airflow/home/airflow.cfg - chris.mclennon
我以与您相同的方式指定了卷。您是否验证了主机上的更改是否在Docker容器内得到反映?我的 airflow.cfg 出现在容器中,但我无法从主机更改它。 - hamdog
2个回答

17

我曾遇到同样的问题,通过在docker-compose.yml中的webserver服务下添加以下行解决了它。

- volumes:
  - ./config/airflow.cfg:/opt/airflow/airflow.cfg

我的配置文件位于名为config的文件夹中,与docker-compose.yml文件在同一目录下。


嘿@hamdog,如果你找到了答案,请将其标记为“已接受”!这将有助于社区,干杯 - Saverio Guzzo
1
它创建了一个文件夹而不是挂载一个文件。 - Voilin
1
/usr/local/airflow 是特定于环境的,所以可能不适用于所有环境。 - BertC
1
答案有些过时,我不认为它能够与当前Airflow官方Docker镜像正常工作。配置文件现在位于/opt/airflow/airflow.cfg。我会相应地编辑我的回答。 - Saverio Guzzo
1
@SaverioGuzzo 你好!我想知道为什么官方的docker-compose https://airflow.apache.org/docs/apache-airflow/2.1.2/docker-compose.yaml 中没有挂载它? - Peter Malik
显示剩余2条评论

10
为了快速更改docker容器内的空气流配置,有很多方法。您可以直接更改环境变量,而不是更改airflow.cfg。在docker容器中,可以直接在docker-compose.yml中轻松修改。然后,您只需快速重新启动docker-compose即可。
以下是一些常见的配置变量:
- dag_folder:AIRFLOW__CORE__DAGS_FOLDER - sql_alchemy_conn:AIRFLOW__CORE__SQL_ALCHEMY_CONN - executor:AIRFLOW__CORE__EXECUTOR 所有配置变量都可以在官方文档中找到。
以下是我的airflow docker-compose片段。
 webserver:
     image: apache/airflow:1.10.12
     depends_on:
         - postgres
     environment:
         - AIRFLOW_HOME=/opt/airflow
         - AIRFLOW__CORE_dags_folder=/opt/airflow/dags
         - AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql://airflow:airflow@postgres/airflow
         - AIRFLOW__CORE__EXECUTOR=LocalExecutor
         - AIRFLOW__CORE__FERNET_KEY=#####youkey################
     volumes:
         - ./dags:/opt/airflow/dags
     command: webserver

嗨Yong,这很棒,而且它完美地运行了。只需在docker-compose的环境部分进行设置更改,然后再次启动容器即可。但是,这不会更改airflow.cfg中的更改,而是设置环境变量。我的疑问是 - 是否有任何方法可以对配置文件进行持久更改?是否有一种真正挂载cfg文件的方法?如果我在卷中执行此操作,则会创建一个文件夹而不是文件。 - Pankaj Mishra
感谢您喜欢这篇文章。我已经很久没有使用Airflow了,所以我只能根据我的模糊记忆回答您的问题。对于airflow.cfg挂载持久化,我曾经尝试过这种方式,应该是可以的。但是在docker首次加载之前,您可能需要将文件放置在正确的位置,否则您可能需要删除旧的容器。我的Airflow配置实际上是针对分布式环境(Swarm模式)而不是独立机器的。好处是无需将单独的配置文件分发到远程服务器。 - Yong Wang

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