如何在气流上运行DockerRoperator?

如何在气流上运行DockerRoperator?,docker,airflow,Docker,Airflow,我正在使用docker compose和气流图像puckel/docker airflow设置一个新的气流服务器。 bash操作符和PythonOperator运行良好,但当我尝试使用DockerOperator时,我得到了[/usr/local/aiffort/dags/XXXXXXX.py]没有名为“docker”的模块 为了在docker中使用docker,我需要如何更改docker compose文件 我试图在谷歌上查找错误信息,但建议的解决方案都不起作用 这是我正在使用的WebServ

我正在使用docker compose和气流图像puckel/docker airflow设置一个新的气流服务器。
bash操作符
PythonOperator
运行良好,但当我尝试使用
DockerOperator
时,我得到了[/usr/local/aiffort/dags/XXXXXXX.py]没有名为“docker”的模块

为了在docker中使用docker,我需要如何更改docker compose文件

我试图在谷歌上查找错误信息,但建议的解决方案都不起作用

这是我正在使用的
WebServer
的docker compose

webserver:
    image: puckel/docker-airflow:1.10.1
    build:
      context: https://github.com/puckel/docker-airflow.git#1.10.1
      dockerfile: Dockerfile
      args:
        AIRFLOW_DEPS: gcp_api,s3,docker        
    restart: always
    depends_on:
      - postgres
    environment:
      - LOAD_EX=n
      - EXECUTOR=Local
      - FERNET_KEY=jsDPRErfv8Z_eVTnGfF8ywd19j4pyqE3NpdUBA_oRTo=
    volumes:
      - ./LOCALPATHTODAGS/dags:/usr/local/airflow/dags
    ports:
      - "8080:8080"
    command: webserver


我的最终目标是能够从我的气流管道触发本地图像的docker容器。

有两种方法可以使用:

  • 将脚本之前的
    添加到当前docker compose:
  • 创建一个
    Dockerfile
    ,该文件使用puckel提供的文件,并在其中安装所需的软件包

  • “docker”实际上也是一个Python模块,可能是在DockerPropertor的源代码中导入的。假设您在
    Dockerfile
    中的
    requirements.txt
    文件中安装依赖项,您可以将
    docker==4.1.0
    添加到
    requirements.txt
    文件中,该文件应与
    Dockerfile
    位于同一目录中

    因此,在Dockerfile中,您需要:

    COPY requirements.txt requirements.txt
    USER root
    RUN pip install -r requirements.txt
    
    docker==4.1.0  # Other versions probably also work
    
    在您的需求文件中,您需要:

    COPY requirements.txt requirements.txt
    USER root
    RUN pip install -r requirements.txt
    
    docker==4.1.0  # Other versions probably also work
    

    这是否意味着我实际上不需要在容器中安装docker(或者,以传统方式安装)?首先,您需要在webserver容器中安装docker,以便apache airflow的DockerPerator可以创建执行任务源代码的“兄弟”容器。您可以通过添加
    runcurl-sSL在webserver容器中安装dockerhttps://get.docker.com/ |sh
    环境共享\u DIR/usr/local/SHARE
    在Web服务器的Dockerfile中。其次,您需要在执行DockerOperator调用的任务的容器中安装Python包
    docker==4.1.0
    。因此,您需要确保在任务的Dockerfile中,包
    docker==4.1.0
    安装在某个位置