2015-05-26 68 views
10

Tôi có vùng chứa docker đang chạy tập lệnh python: chờ yêu cầu nhập và xử lý dữ liệu tương ứng.Theo dõi thay đổi tệp trong khối Docker

Vì tôi đang sử dụng đế để phát triển, Tôi muốn, bất cứ khi nào tôi thay đổi mã nguồn của tệp python đó (trong máy của tôi, không phải vùng chứa), vùng chứa sẽ ngừng tập lệnh python và khởi chạy lại nó bằng Mã mới. Bởi vì ngay bây giờ tôi phải tự dừng ngăn chứa và khởi động lại nó. Tôi cũng có thể theo dõi các thay đổi tập tin trên mặt của tôi (chứ không phải bên trong container) nhưng tôi muốn tránh điều đó và làm điều đó trong container chính nó.

Tôi đang sử dụng tùy chọn volumes của docker-compose để chia sẻ mã nguồn giữa FS của tôi và vùng chứa.

Để theo dõi các thay đổi của tệp, tôi đã cố gắng sử dụng tiện ích vỏ watchmedo từ mô-đun python watchdog. Tôi chỉ có vấn đề lạ mà tôi không thể nhận thấy các thay đổi tập tin của tập tin nguồn python đó trừ khi tôi chỉnh sửa nó từ bên trong thùng chứa và không phải trong FS cục bộ của tôi, mặc dù chúng được gắn với tùy chọn volumes.

Tôi có cảm giác rằng đây là điều cần làm với cách trình docker hoạt động và có thể cả khối lượng. Tôi đã cố gắng để đọc trên nó trực tuyến, nhưng đã không nhận được nhiều may mắn. Ý tưởng nào? Tôi hoàn toàn bị mắc kẹt!

EDIT: Đây là gif giải thích rõ hơn. Phần trên cùng của các ô được kết nối với cùng một vùng chứa và hai phần dưới cùng với máy cục bộ của tôi. Tất cả các panes được trỏ đến cùng một thư mục. gif

+0

bạn có thể chỉ cho bạn chạy lệnh, Dockerfile của bạn, vị trí của tệp python (mà bạn theo dõi thay đổi) không? – user2915097

+1

Hệ điều hành máy chủ OSX của bạn? Nếu vậy hãy kiểm tra [Cách nào đúng để thiết lập môi trường phát triển trên OS X với Docker?] (Http://stackoverflow.com/q/30090007/266795) –

+0

bạn đã gắn kết gắn kết /var/run/docker.sock, hoặc để đặt nó theo một cách khác, bạn có một '-v /var/run/docker.sock:/var/run/docker.sock' trong lệnh chạy của bạn không? – user2915097

Trả lời

3

Bạn có thể đã chứa của bạn chạy một cái gì đó như thế này (không cần cài đặt inotify):

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

Về cơ bản chờ đợi những thay đổi trên tập tin, giết trăn trên máy tính này, chạy kịch bản một lần nữa. Nếu kịch bản python không chạy ở chế độ nền/deamonized trong bất kỳ cách nào bạn có thể sử dụng một & như vậy: các python /path/to/python/script &

Đặt này vào run.sh, thêm một cái gì đó như thế này để Dockerfile bạn

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

... và bạn nên tốt.

Các vấn đề liên quan