web-dev-qa-db-ja.com

壊れたDAG:(...)dockerという名前のモジュールはありません

BigQueryコネクタをすべて実行していますが、Dockerコンテナに既存のスクリプトがいくつかあります。AppEngineFlexibleの代わりにCloud Composer.

私が見つけることができる例に従っているように見える以下のスクリプトがあります:

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'
 )

...しかし、実行しようとすると、WebUIで次のように表示されます。

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

おそらく、Cloud Composerが実行されるKubernetesクラスター内でDockerが機能するように構成されていないのでしょうか?それとも、構文に何かが欠けているだけですか?

7
MarkeD

私は、composerのPyPIセクションにdocker-py == 1.10.6をインストールすることで解決しました。

ただし、DockerOperatorを正しく機能させるには、composerワーカーがDockerデーモンにアクセスできないため、もう少し手間がかかります。GCPコンソールに移動し、次の手順を実行してください。 クラスター資格情報 )。

  1. 現在のデプロイメント構成をファイルにエクスポート

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

  2. Airflow-worker-config.yaml( リンク例 )を編集してdocker.sockとdockerをマウントし、airflow-workerに特権アクセスを許可してdockerコマンドを実行します

  3. 展開設定を適用する

    kubectl apply -f airflow-worker-config.yaml

7
mchan

つまり、Airflowインスタンスがインストールされている場所に、dockerという名前のPythonパッケージがありません。

パーソナルマシンを構成すると、不足しているパッケージを次のコマンドでインストールできます。

pip install docker

[〜#〜]編集[〜#〜]

Dockerコンポーネントのソースコード内 https://airflow.incubator.Apache.org/_modules/airflow/operators/docker_operator.html

importステートメントがあります:

from docker import Client, tls

したがって、新しいエラーcannot import name Clientは、壊れたインストールまたは間違ったバージョンのdockerパッケージに接続されているようです。

3
tobi6

Tobi6の回答に記載されているように、Docker用のPyPIパッケージをComposer環境にインストールする必要があります。PyPIパッケージを環境にインストールするための手順があります ここ 特定のパッケージバージョン。

0
Wilson