2015-05-26 19 views
10

Mam kontener dokowania, który uruchamia skrypt Pythona: oczekiwanie na żądania wejścia i przetwarzanie danych odpowiednio.Monitorowanie zmian w plikach w woluminach Docker

Ponieważ używam docker do programowania, Chciałbym, aby po każdej zmianie kodu źródłowego tego pliku Pythona (w moim komputerze, a nie w kontenerze) kontener zatrzymał skrypt Pythona i ponownie go uruchomi nowy kod. Ponieważ teraz muszę ręcznie zatrzymać pojemnik i ponownie go uruchomić. Mógłbym też monitorować zmiany plików po mojej stronie (zamiast w kontenerze), ale chciałbym tego uniknąć i zrobić to w samym kontenerze.

Używam opcji docker-compose w wersji volumes do udostępniania kodu źródłowego między moim FS a kontenerem.

Aby monitorować zmiany w plikach, próbowałem użyć narzędzia powłoki watchmedo z modułu python watchdog. Po prostu mam ten dziwny problem, że nie mogę zauważyć zmian pliku tego pliku źródłowego Pythona, chyba że edytuję go z wnętrza kontenera, a nie w moim lokalnym FS, nawet jeśli są one montowane z opcją volumes.

Mam wrażenie, że ma to coś wspólnego z działaniem dockera, a może również z woluminami. Próbowałem przeczytać na ten temat w Internecie, ale nie miałem szczęścia. Jakieś pomysły? Całkowicie utknąłem!

EDYCJA: Oto gif, który lepiej to wyjaśnia. Górne do paneli są podłączone do tego samego kontenera, a dolne dwa do mojego lokalnego komputera. Wszystkie panele są wskazane w tym samym folderze. gif

+0

Czy możesz pokazać polecenie uruchomienia, plik Docker, lokalizację pliku Pythona (który monitorujesz zmiany)? – user2915097

+1

Czy Twój host OS OSX? Jeśli tak, sprawdź [Jaki jest właściwy sposób konfiguracji środowiska programistycznego w systemie OS X za pomocą Docker?] (Http://stackoverflow.com/q/30090007/266795) –

+0

czy powiązałeś mount /var/run/docker.sock, lub mówiąc inaczej, czy w poleceniu run masz '-v /var/run/docker.sock:/var/run/docker.sock'? – user2915097

Odpowiedz

3

Mogłeś Twój pojemnik uruchomić coś takiego (potrzeba inotify zainstalowany):

while true 
do 
     inotifywait -e create -e modify /path/to/python/script 
     pkill python 
     python /path/to/python/script 
done 

Zasadniczo czekać na zmiany w pliku, zabić Pythona na maszynie, ponownie uruchomić skrypt. Jeśli skrypt python nie jest uruchomiony w tle/deamonized w jakikolwiek sposób można użyć & tak: python /path/to/python/script &

umieścić to w run.sh, dodać coś takiego do Dockerfile

COPY run.sh /run.sh 
CMD ["bash", "-l", "/run.sh"] 

... i powinieneś być dobry.