This script monitors directory bindings of Docker containers on Windows hosts and notifies containers about file changes.
![]()
The script aims to be workaround for the problem of file change events propagation on Windows hosts. Due to limitations of CIFS implementation in Linux kernel, file change events in mounted folders of host are not propagated to container by Docker for Windows. This problem renders watch mode of modern frameworks (e.g. Jekyll, ng-cli, etc.) development servers useless, since containers are not notified about file changes. This problem is described on Docker Community Forums.
In this blog post, I'll show you how to create a volume and mount it Into a Windows Container using Docker. Mounting Images In Containers Is.
Installation
This script can be installed with pip (both Python 2 & 3 are supported).
Usage![]()
Monitor all directory bindings of all containers. The script will listen for container start/stop events and notify all running containers about file changes.
![]()
Monitor only bindings of container
container_name .
Monitor only binding of
container_name to host directory C:somedirectory .
You can also specify wildcards with
* and ? characters. For example: monitor only bindings of containers with names containing myproject to directories starting with C:projectfolder .
Do not monitor files/directories matching
*.git* and *build* patterns:
If you experience duplicate notification issue (e.g. Duplicate notification - a single change triggers 2 notifications to the container), try event debounce feature:
Use flag
-v to enable verbose output: the script will report start/stop events of eligible containers and print all detected file changes.
Limitations
Implementation details
The script uses
watchdog package to observe file change events of the host directory. Once file change event is fired the script reads file permissions of changed file (using stat util) and rewrites file permissions with the same value (using chmod util) thus triggering inotify event inside container.
'Rewrite file permissions approach' was used instead of updating file last modified time with touch util. Since touching will cause event loop: touch will trigger file change event in Windows, script will handle this event and touch file again, etc.
![]() Comments are closed.
|
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
December 2022
Categories |