同一主机上两个Docker容器之间的Resilio同步速度慢

时间:2018-10-21 04:11:31

标签: docker bittorrent-sync

我正在在同一主机上使用两个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 进入容器并创建文件或文件夹,则同步会立即发生。

我这里缺少什么吗?

1 个答案:

答案 0 :(得分:2)

Resilio Sync使用两种机制来跟踪文件系统中的更改:

  • Resilio Sync订阅的文件系统通知(以立即获取有关文件系统更改的信息)。这些通知只是一种操作系统内核机制,例如在Linux上使用Inotify API
  • 定期重新扫描同步中添加的所有文件夹(默认情况下每10分钟发生一次,可以在settings中进行配置)

您可能知道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

如文章所述:

  

该脚本将检查所有正在运行的容器并开始通知   有关已安装目录更改的容器。该脚本还将   侦听容器启动/停止事件并更新监视的列表   目录。