我正在在同一主机上使用两个docker containers测试Resilio(以前称为BitTorrent)同步,并且我发现通过绑定安装添加文件时,同步文件的速度非常慢。
第一个Resilio容器:
docker run -d --name resilio1 -p 81:8888 -p 55555:55555 -v /c/Users/Test/resilio/resilio1/config:/mnt/sync -v /c/Users/Test/resilio/resilio1/data:/mnt/mounted_folders/data --restart on-failure resilio/sync
第二个Resilio容器(我已更新配置以侦听端口55556以避免与resilio1发生冲突):
docker run -d --name resilio2 -p 82:8888 -p 55556:55556 -v /c/Users/Test/resilio/resilio2/config:/mnt/sync -v /c/Users/Test/resilio/resilio2/data:/mnt/mounted_folders/data --restart on-failure resilio/sync
将小文件添加到绑定安装在容器中的主机目录中后,甚至需要花费大约10分钟的时间进行同步。
相反,如果我 docker exec 进入容器并创建文件或文件夹,则同步会立即发生。
我这里缺少什么吗?
答案 0 :(得分:2)
Resilio Sync使用两种机制来跟踪文件系统中的更改:
您可能知道Windows上的Docker使用Linux VM可以工作,并且依赖Linux内核中的SMB / CIFS支持。正如Jochem Kuijpers所提到的,该问题与文件系统通知有关,在Windows和已安装卷的情况下,该通知无法正常工作,这是known issue。
解决方法是使用一些第三方工具来跟踪已安装的Windows卷中的更改,并通知Docker容器。
例如,您可以使用docker-windows-volume-watcher。安装非常简单(脚本需要在Windows上安装):
pip install docker-windows-volume-watcher
用法也很简单:
docker-volume-watcher <container_name> C:\path\to\mounted\directory
如文章所述:
该脚本将检查所有正在运行的容器并开始通知 有关已安装目录更改的容器。该脚本还将 侦听容器启动/停止事件并更新监视的列表 目录。