破坏的DAG :( ...)没有名为docker的模块

时间:2018-05-09 12:11:15

标签: docker airflow directed-acyclic-graphs google-cloud-composer

我的BigQuery连接器都在运行,但我在Docker容器中有一些现有脚本,我希望在Cloud Composer上安排,而不是App Engine Flexible。

我有以下脚本,似乎遵循我可以找到的示例:

import datetime
from airflow import DAG
from airflow import models
from airflow.operators.docker_operator import DockerOperator

yesterday = datetime.datetime.combine(
    datetime.datetime.today() - datetime.timedelta(1),
    datetime.datetime.min.time())

default_args = {
    # Setting start date as yesterday starts the DAG immediately
    'start_date': yesterday,
    # If a task fails, retry it once after waiting at least 5 minutes
    'retries': 1,
    'retry_delay': datetime.timedelta(minutes=5),
}

schedule_interval = '45 09 * * *'

dag = DAG('xxx-merge', default_args=default_args, schedule_interval=schedule_interval)

hfan = DockerOperator(
   task_id = 'hfan',
   image   = 'gcr.io/yyyyy/xxxx'
 )

...但是在尝试运行它时会在网络用户界面中告诉我:

Broken DAG: [/home/airflow/gcs/dags/xxxx.py] No module named docker

可能是Docker未配置为在Cloud Composer运行的Kubernetes集群内部工作吗?或者我只是在语法中遗漏了什么?

3 个答案:

答案 0 :(得分:4)

我通过在composer的PyPI部分安装docker-py == 1.10.6解决了这个问题。

但是,要使DockerOperator正常工作需要更多的努力,因为作曲家工作者无法访问Docker守护程序。前往GCP控制台并执行以下步骤;获得cluster credentials后)。

  1. 将当前部署配置导出到文件

    kubectl get deployment airflow-worker -o yaml --export > airflow-worker-config.yaml

  2. 编辑airflow-worker-config.yaml(example link)以挂载docker.sock和docker,授予对airflow-worker的特权访问以运行docker命令

  3. 应用部署设置

    kubectl apply -f airflow-worker-config.yaml

答案 1 :(得分:1)

如其他答案所述,Docker Python客户端未预先安装在Cloud Composer环境中。要安装它,请将其添加为您环境配置中的PyPI依赖项。

注意事项:默认情况下,DockerOperator将尝试通过/var/run/docker.sock与Docker API进行对话来管理容器。该插座不是安装在Composer Airflow工作人员吊舱内,并且不建议手动配置该插座以实现 Use of DockerOperator is only recommended in Composer if configured to talk to Docker daemons running outside of your environments

为避免绕过Kubernetes造成更脆弱的配置或意外情况(因为它负责管理整个集群中的容器),您应该使用KubernetesPodOperator。如果要将容器启动到GKE群集(或Composer环境的群集)中,则可以使用GKEPodOperator,它具有更特定的GCP相关参数。

答案 2 :(得分:0)

正如tobi6的回答所述,您需要在Composer环境中安装docker的PyPI包。有关于在您的环境中以特定软件包版本安装PyPI软件包的说明here