Некоторая папка монтируется с помощью:
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