Создание контейнеров Docker из Airflow, где сам Airflow находится в контейнере (из-за Windows 10). Чего мне не хватает?

#python #docker #airflow

#python #docker #воздушный поток

Вопрос:

У меня есть простой пример скрипта python, который я хочу, чтобы Airflow запускался по расписанию. Я могу создать контейнер для Airflow и успешно установить сервер Docker в этот контейнер. Я могу получить доступ к CLI и «запустить docker» контейнер примера вручную, и это работает. Когда я пробую это у администратора локального хоста, он просто говорит «работает» навсегда. Проверка «docker ps» в CLI показывает, что он не запустил контейнер. Я уверен, что пропустил что-то простое, поскольку здесь не так много, чтобы усложнять ситуацию. Помогите, пожалуйста !?

Вот сценарий 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:

 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"] 
)
  

Я перепробовал множество вариантов вокруг команды и точки входа, но безрезультатно. Большое спасибо.

Ответ №1:

Хорошо, это немного смущает. Я не переключил переключатель в положение «Вкл.» в администраторе локального хоста.