首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Airflow DockerOperator,如何向容器添加体积

Airflow DockerOperator,如何向容器添加体积
EN

Stack Overflow用户
提问于 2021-08-03 13:25:10
回答 2查看 566关注 0票数 0

我有一系列任务,用于启动容器并在其中运行python脚本。但是,我需要挂载包含python代码的卷...

在遇到许多错误后,我发现不再支持添加卷,现在必须指定一个装载对象:https://github.com/apache/airflow/pull/15843

我的任务代码如下所示:

代码语言:javascript
复制
from airflow.operators.docker_operator import DockerOperator
from docker.types import Mount

code_dir = Mount(target='/SRC',
                     source='/SRC/code',
                     type='bind')

task_name = DockerOperator(
            task_id=f"task_{task_name}",
            image='python-multi-purpose:latest',
            container_name=task_name,
            mount=[code_dir],
            api_version='auto',
            auto_remove=True,
            command=command,
            docker_url="unix://var/run/docker.sock",
            network_mode="bridge",
            dag=dag
        )

不幸的是,我运行的错误与使用volumes=list时收到的错误完全相同

代码语言:javascript
复制
airflow.exceptions.AirflowException: Invalid arguments were passed to DockerOperator (task_id: task_yh_get_info.A). Invalid arguments were:
**kwargs: {'mount': [{'Target': '/SRC', 'Source': '/SRC/code', 'Type': 'bind', 'ReadOnly': False}]}

有没有人能提供语法和逻辑上的解释来说明如何实现这个功能?

或者,有任何关于如何实现这一点的建议吗?请记住,我让气流在容器内运行

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-05 16:19:47

好的。然后是另一个答案(如果您有最新的docker提供商):

mount -> mounts.

参数名称中存在拼写错误:https://airflow.apache.org/docs/apache-airflow-providers-docker/stable/_api/airflow/providers/docker/operators/docker/index.html

票数 1
EN

Stack Overflow用户

发布于 2021-08-04 18:43:23

我认为您遇到的主要问题是Docker Provider 2.0.0中存在一个bug,该bug阻止Docker Operator与Docker- in -Docker解决方案一起运行。在2.1.0中已经解决了这个问题

您需要升级到最新的Docker Provider 2.1.0 https://airflow.apache.org/docs/apache-airflow-providers-docker/stable/index.html#id1

您可以像https://airflow.apache.org/docs/docker-stack/build.html#extending-the-image中描述的那样,使用以下docker文件扩展图像:

代码语言:javascript
复制
FROM apache/airflow
RUN pip install --no-cache-dir apache-airflow-providers-docker==2.1.0

在这种情况下,操作员将使用“备用”模式(和警告消息)进行开箱即用的工作,但您也可以禁用导致问题的挂载。来自https://airflow.apache.org/docs/apache-airflow-providers-docker/stable/_api/airflow/providers/docker/operators/docker/index.html的更多解释

但是,如果您必须记住,当您使用docker-in-docker (并安装docker socket)时,"bind“mount的行为可能不是您所期望的。它实际上会将“主机”卷挂载到由DockerOperator运行的新容器中,它不会将文件夹从一个容器挂载到另一个容器。但我相信这就是你想要做的--如果是这样的话,新版本的Docker Provider应该会解决你的问题。

此外-如果这仍然不能解决您的问题,您可以随时将DockerOperator降级到“卷/挂载”更改之前的以前版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68636890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档