Чтение файлов на локальном компьютере из контейнера docker

#python #docker #airflow

#питон #докер #воздушный поток

Вопрос:

Я запускаю airflow из образа docker под названием puckel / docker-airflow. Я синхронизировал свою локальную папку dag с папкой container airflow при запуске контейнера с помощью следующей команды docker:

 docker run -d -p 8080:8080 -v <local_path>:/usr/local/airflow/dags puckel/docker-airflow webserver
 

В моей базе данных у меня есть a PythonOperator , которая вызывает функцию с именем start_script , эта функция в основном считывает и инициализирует файлы для извлечения некоторой информации (например, паролей).
Функция выглядит следующим образом:

 def start_script():
    config_parser = configparser.RawConfigParser()
    config_parser.read("C:/dags/file.ini")
    pwd= config_parser.get("LOGS", "pwd")
 

Когда я запускаю эту функцию локально, функция может прочитать файл и ввести пароль, к сожалению, когда я запускаю в docker с помощью тестовой команды dag, она возвращает следующую ошибку:

 configparser.NoSectionError: No section: 'LOGS'
 

Каков правильный способ вызова файлов на моем локальном компьютере из контейнера?
Я действительно думаю, что когда я запускаю функцию в контейнере, функция не распознает путь, который должен прочитать config_parser.

Спасибо, что уделили мне время!

Комментарии:

1. Используете ли вы /usr/local/airflow/dag/file.ini в качестве пути к конфигурации в Docker?

2. /usr/local/airflow/dag — это стандартный путь dag для puckel/ docker-airflow. Я не знаю, как проверить, каков путь к конфигурации. Не могли бы вы сообщить, какова команда для его проверки?

3. Что <local_path> в вашей команде?

4. <local_path> — это папка, в которой я сохраняю свои базы данных на своем компьютере: C:/dags

Ответ №1:

Внутри контейнера вы должны указать на файл конфигурации в подключенном томе, поэтому измените config_parser.read("C:/dags/file.ini") на config_parser.read("/usr/local/airflow/dags/file.ini") .