Слушатель событий в Docker, использующий монтирование тома, не работает - PullRequest
0 голосов
/ 27 июня 2019

Некоторая папка монтируется с помощью:

docker run -it  C:\Users\User\Documents\project\input:/app/input/ project:latest 

В контейнере Python запускается экземпляр watchdog.observers, чтобы определить, добавлены ли новые файлы в папку хоста. Эти файлы попадают в Docker-контейнер через монтирование тома. Триггер события созданного файла не достигает контейнера Docker. Я думаю, что это странно, потому что в контейнере Docker тоже происходят события?

Когда я запускаю свой код локально, а не в Docker, он работает.

Работает ли прослушивание событий в моем контексте?

main.py

from watch import ImagesWatcher

if __name__ == '__main__':
    src_path = "/app/input/"
    ImagesWatcher(src_path).run()

watch.py ​​

import sys
import time

from watchdog.observers import Observer
from ImagesEventHandler import ImagesEventHandler


class ImagesWatcher:
    def __init__(self, src_path):
        self.__src_path = src_path
        self.__event_handler = ImagesEventHandler()
        self.__event_observer = Observer()


    def run(self):
        self.start()
        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            self.stop()

    def start(self):
        self.__schedule()
        self.__event_observer.start()

    def stop(self):
        self.__event_observer.stop()
        self.__event_observer.join()

    def __schedule(self):
        self.__event_observer.schedule(
            self.__event_handler,
            self.__src_path,
            recursive=True
        )

if __name__ == "__main__":
    src_path = sys.argv[1] if len(sys.argv) > 1 else '.'
    ImagesWatcher(src_path).run()

imagesEventHandler.py

from watchdog.events import RegexMatchingEventHandler

class ImagesEventHandler(RegexMatchingEventHandler):
    THUMBNAIL_SIZE = (128, 128)
    IMAGES_REGEX = [r".*[^_thumbnail]\.jpg$"]

    def __init__(self):
        # self.Analyzer = Analyzer()
        super().__init__(self.IMAGES_REGEX)

    def on_created(self, event):
        self.process(event)

    def process(self, event):
        print("DETECTED")

Dockerfile:

FROM python:3.6
RUN pip install watchdog
ADD . .
WORKDIR /app/
RUN main.py

1 Ответ

0 голосов
/ 09 июля 2019

Коллега порекомендовал мне следующее: https://github.com/merofeev/docker-windows-volume-watcher

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...