docker - 损坏的 DAG:(...)没有名为 docker 的模块
问题描述
我的 BigQuery 连接器都在运行,但是我希望在 Cloud Composer 而不是 App Engine Flexible 上安排一些现有的 Docker 容器中的脚本。
我有以下脚本,似乎遵循我能找到的示例:
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'
)
...但是在尝试运行时,它会在 Web UI 中告诉我:
Broken DAG: [/home/airflow/gcs/dags/xxxx.py] No module named docker
Docker 是否未配置为在 Cloud Composer 运行的 Kubernetes 集群内工作?还是我只是在语法中遗漏了什么?
解决方案
我通过在 composer 的 PyPI 部分安装 docker-py==1.10.6 解决了这个问题。
然而,要让 DockerOperator 正常工作需要更多的努力,因为作曲家工作人员无法访问 Docker 守护程序。前往 GCP 控制台并执行以下步骤;获得集群凭据后)。
将当前部署配置导出到文件
kubectl get deployment airflow-worker -o yaml --export > airflow-worker-config.yaml
编辑airflow-worker-config.yaml(示例链接)以挂载docker.sock和docker,授予airflow-worker特权访问以运行docker命令
应用部署设置
kubectl apply -f airflow-worker-config.yaml
推荐阅读
- ios - 如何使用 Swift 语言显示 AdMob 应用打开广告?
- r - 使用 Ubuntu 20.10 在 Raspberry Pi 4 上安装 R 4.0.3
- javascript - 通过事件监听器切换/显示图像
- python - 为什么 tensorflow 仍然看不到我的 GPU?
- c# - Visual Studio c#,使用 .Image 属性由于某种原因引发错误
- python - 用 Python 附加的多维 numpy 数组
- php - 在php中为每个用户制作一个独特的电路
- python - 将消息变量从 discord.py 中的 async def 中传递出去
- mysql - 如何用mysql显示每个用户的最高分
- python - Discord.py - 根据频道检查用户是否具有角色