Я разрабатываю процесс ETL, который планируется и организуется с помощью Apache Воздушный поток с использованием DockerOperator. Я работаю на Windows ноутбуке, поэтому я могу запускать Apache Airflow только из контейнера docker Мне удалось смонтировать папку на моем windows ноутбуке с файлами конфигурации (называемой configs
ниже) в контейнер воздушного потока (называемый ниже веб-сервером), используя том, указанный в файле docker-compose.yml
ниже, который находится в моем проекте root каталог. Соответствующий код из файла docker-compose.yml
можно увидеть ниже:
version: '2.1'
webserver:
build: ./docker-airflow
restart: always
privileged: true
depends_on:
- mongo
- mongo-express
environment:
- LOAD_EX=n
- EXECUTOR=Local
volumes:
- ./docker-airflow/dags:/usr/local/airflow/dags
# Volume for source code
- ./src:/src
- ./docker-airflow/workdir:/home/workdir
# configs folder as volume
- ./configs:/configs
# Mount the docker socket from the host (currently my laptop) into the webserver container so that the webserver container can create "sibbling" containers
- //var/run/docker.sock:/var/run/docker.sock # the two "//" are needed for windows OS
ports:
- 8081:8080
command: webserver
healthcheck:
test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
interval: 30s
timeout: 30s
retries: 3
networks:
- mynet
Теперь я хочу передать эту папку configs
со всем ее содержимым в контейнеры, созданные DockerOperator. Хотя эта папка configs
была явно подключена к файловой системе контейнера веб-сервера, эта папка configs
полностью пуста, и из-за этого мой DAG не работает. Код для DockerOperator выглядит следующим образом:
cmd = "--config_filepath {} --data_object_name {}".format("/configs/dev.ini", some_data_object)
staging_op = DockerOperator(
command=cmd,
task_id="my_task",
image="{}/{}:{}".format(docker_hub_username, docker_hub_repo_name, image_name),
api_version="auto",
auto_remove=False,
network_mode=docker_network,
force_pull=True,
volumes=["/configs:/configs"] # "absolute_path_host:absolute_path_container"
)
Согласно документации, левая сторона тома должна быть абсолютным путем к хосту, который (если я правильно понял) является контейнером веб-сервера в этот случай (потому что он создает отдельные контейнеры для каждой задачи). Правая сторона тома - это каталог внутри контейнера задачи, который создается DockerOperator. Как упоминалось выше, папка configs
внутри контейнера задачи существует, но она полностью пуста. Кто-нибудь знает, почему это так и как это исправить?
Большое спасибо за помощь!