Airflow Docker部署:任务未在start_date + schedule_interval之后运行

时间:2017-03-10 17:19:53

标签: python docker dockerfile airflow

我是Airflow的新手。我想我已经阅读了Airflow文档中关于调度的所有文章,但是我仍然无法在start_date + schedule_interval之后运行我的DAG(即没有任务实例)。我正在使用码头工具。我想知道我错过了一个调度Dags的命令,尽管在我使用教程代码时并非如此。

这是我的dockerfile。

FROM ubuntu:latest
FROM python:3

RUN apt-get update -y
RUN apt-get install -y python-pip python-dev apt-utils build-essential
RUN pip install --upgrade pip

# Installs these and a few others
# mysqlclient==1.3.10
# airflow==1.7.1.3
COPY dependencies /dependencies
RUN pip install -r dependencies/requirements_loader.txt

COPY airflow /root/airflow

# Load other dependencies 


# I have tried many different variation of these commands with no luck
CMD airflow webserver -p 8080
CMD airflow scheduler -d DAG_id

我正在使用PythonOperator和一个加载我编写的库的模块。我不确定这是否是正确的方法,但它有效airflow test dag_id execution_date。这是我最特别的。测试工作正常,但是当我开始气流时它实际上从未运行过。我正在使用LocalExecutor。这是我的傻瓜。

from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta
from my_lib import my_func

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2017, 3, 6),
    'email_on_failure': False,
    'email_on_retry': False,
    'email': ['airflow@airflow.com'],
    'retries': 1,
    'retry_delay': timedelta(minutes=5)
}


dag = DAG('dag_id', default_args=default_args, schedule_interval="31 2 * * *")

t1 = PythonOperator(
    dag=dag,
    task_id='run_my_func',
    provide_context=False,
    python_callable=my_func)

我还搞乱了计划间隔和开始日期,包括一个月前开始的@daily间隔日期。这些都没有给我带来任何好运。

真正令人困惑的是,当我测试dag时,它可以工作,但是在部署之后它没有被调度并创建任何task_instances。

任何人都可以指出我正确的方向进行正确安排dags的部署吗?我做错了什么?

1 个答案:

答案 0 :(得分:1)

问题是你不能在dockerfile的末尾使用两个CMD命令。一旦我使用docker-compose创建了两个dockerfiles,它就可以正常工作。

  

Dockerfile中只能有一条CMD指令。如果列出多个CMD,则只有最后一个CMD才会生效。

https://docs.docker.com/engine/reference/builder/#cmd