首页 > 解决方案 > 从 Airflow 创建 Docker 容器,其中 Airflow 本身位于容器中(因为 Windows 10)。我错过了什么?

问题描述

我有一个简单的示例 python 脚本,我希望 Airflow 按计划运行。我可以为 Airflow 创建容器并在此容器中成功安装 Docker 服务器。我可以手动访问 CLI 和“docker run”示例的容器并且它可以工作。当我从 localhost 管理员尝试它时,它只会说“正在运行”。在 CLI 中检查“docker ps”表明它尚未启动容器。我敢肯定我错过了一些简单的事情,因为这里没有太多复杂的事情。请帮忙!?

这是python脚本:

import time as ti

def main():
    print('TEST')
    ti.sleep(120)
    print('COMPLETE')

if __name__ == "__main__":
    main()  

以及构建它的 Dockerfile:

FROM python:3.8

WORKDIR /code

ENV PATH "$PATH:/code"

COPY docker_test.py .

CMD ["python", "docker_test.py"]

要创建 Airflow 容器,我使用这个 Dockerfile:

# Adds Docker to puckel image
FROM puckel/docker-airflow

# Adds DAG folder to the PATH
ENV PYTHONPATH "${PYTHONPATH}:/home/python_modules:/usr/local/airflow/dags"

# Install the optional packages
COPY requirements.txt requirements.txt
USER root
RUN pip install -r requirements.txt

# Install docker inside the webserver container
RUN curl -ssl https://get.docker.com/ | sh
ENV SHARE_DIR /usr/local/share

requirements.txt 包含 docker 并且 docker run 命令是:

docker run --restart always --name airflow_container --privileged -d -p 8080:8080 -v C:/Users/myprojectfolders/shared_volumes/dags:/usr/local/airflow/dags -v //var/run/docker.sock:/var/run/docker.sock mydockerlogin/airflow:2 webserver

最后一块拼图是 DAG 文件:

from airflow import DAG
from airflow.operators.docker_operator import DockerOperator
from datetime import datetime, timedelta


default_args = {
    'owner': 'myname',
    'depends_on_past': False,
    'start_date': datetime(2020, 10, 10),
    'retries': 1,
    'retry_delay': timedelta(minutes=2)
}


dag = DAG(
    dag_id='docker_test',
    schedule_interval='*/5 * * * *',
    default_args=default_args    
)


task = DockerOperator(
    dag=dag,
    task_id='dockertask',
    container_name = 'dockertest',
    image='mydockerlogin/dockertest:2',
    auto_remove=False,
    docker_url='unix://var/run/docker.sock',
    command = ["python", "docker_test.py"] 
)

我在命令和入口点周围尝试了很多变化,但无济于事。非常感谢。

标签: pythondockerairflow

解决方案


好的,所以这有点尴尬。我没有在 localhost 管理员中将开关切换到“开”。


推荐阅读