Сломанный DAG: (...) Нет модуля с именем docker - PullRequest
0 голосов
/ 09 мая 2018

У меня все коннекторы 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 не настроен для работы внутри кластера Kubernetes, который работает Cloud Composer? Или я просто что-то упустил в синтаксисе?

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Как отмечается в ответе tobi6, в вашей среде Composer должен быть установлен пакет PyPI для докера. Есть инструкции здесь для установки пакетов PyPI в вашей среде с определенной версией пакета.

0 голосов
/ 08 июня 2018

Я решил проблему, установив docker-py == 1.10.6 в разделе PyPI композитора.

Однако для правильной работы DockerOperator требуется немного больше усилий, поскольку работники композитора не имеют доступа к демону 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

0 голосов
/ 09 мая 2018

Это означает: где бы ни был установлен ваш экземпляр Airflow, пакет Python с именем docker отсутствует.

Если я настрою свой персональный компьютер, я могу установить отсутствующие пакеты с помощью

pip install docker

EDIT

В исходном коде компонента Docker https://airflow.incubator.apache.org/_modules/airflow/operators/docker_operator.html

есть оператор импорта:

from docker import Client, tls

Таким образом, новая ошибка cannot import name Client кажется мне связанной с неправильной установкой или неправильной версией пакета docker.

...