Мониторинг изменений файлов в томах докеров
У меня есть контейнер докеров, который запускает python script: ожидает ввода запросов и обработки данных соответственно.
Поскольку я использую docker для разработки, , я бы хотел, чтобы всякий раз, когда я меняю исходный код этого файла python (на моей машине, а не на контейнере), контейнер останавливает python script и перезапускает это с новым кодом. Потому что сейчас я должен вручную остановить контейнер и перезапустить его. Я мог бы также следить за изменениями файлов на моей стороне (а не внутри контейнера), но я хотел бы избежать этого и сделать это внутри самого контейнера.
Я использую параметр docker-compose volumes
для совместного использования исходного кода между моим FS и контейнером.
Чтобы отслеживать изменения файла, я пытаюсь использовать утилиту watchmedo из watchdog модуль python. У меня просто есть эта странная проблема, что я не могу заметить изменения файла этого исходного файла python, если я не редактирую его изнутри контейнера, а не в своей локальной FS, даже если они установлены с помощью volumes
.
Мне кажется, что это связано с тем, как работает докер, а может и с томами. Я пытался прочитать его в Интернете, но не получил большой удачи. Есть идеи? Я полностью застрял!
EDIT: Здесь gif, который лучше объясняет это. Верхняя часть панелей подключается к одному и тому же контейнеру, а нижняя - к локальной машине. Все панели указаны в одной папке.
![gif]()
Ответы
Ответ 1
Возможно, ваш контейнер запускает что-то вроде этого (необходимо установить inotify):
while true
do
inotifywait -e create -e modify /path/to/python/script
pkill python
python /path/to/python/script
done
В основном подождите изменений в файле, запустите python на машине, запустите script снова.
Если python script не работает в фоновом режиме /deamonized любым способом, вы можете использовать a и так: python /path/to/python/script &
Поместите это в run.sh, добавьте что-то подобное в свой файл Dockerfile
COPY run.sh /run.sh
CMD ["bash", "-l", "/run.sh"]
... и вы должны быть хорошими.