#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:
Хорошо, это немного смущает. Я не переключил переключатель в положение «Вкл.» в администраторе локального хоста.