Slow Resilio在同一主机上的两个Docker容器之间同步

atm*_*atm 9 docker bittorrent-sync

我正在使用同一主机上的两个docker容器测试Resilio(以前的BitTorrent)Sync ,我注意到同步文件在通过bind mounts添加时非常慢.

First 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
Run Code Online (Sandbox Code Playgroud)

第二个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
Run Code Online (Sandbox Code Playgroud)

即使小文件被添加到绑定装入容器的主机目录中也需要大约10分钟才能同步.

相反,如果我将docker exec放入容器并创建文件或文件夹,则会立即进行同步.

这里有什么我想念的吗?

Art*_*ski 2

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

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

您可能知道 Windows 上的 Docker 使用Linux VM运行,并依赖于 Linux 内核中的 SMB/CIFS 支持。正如 Jochem Kuijpers 提到的,该问题与文件系统通知有关,该通知在 Windows 和已安装卷的情况下无法正常工作,这是一个已知问题

解决方法是使用一些第三方工具来跟踪已安装的 Windows 卷中的更改并通知 Docker 容器。

例如,您可以使用docker-windows-volume-watcher 。安装非常简单(脚本需要安装在Windows上):

pip install docker-windows-volume-watcher
Run Code Online (Sandbox Code Playgroud)

使用方法也很简单:

docker-volume-watcher <container_name> C:\path\to\mounted\directory
Run Code Online (Sandbox Code Playgroud)

正如文章所说:

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