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

标签 docker bittorrent-sync

我正在使用两个 docker containers 测试 Resilio(以前称为 BitTorrent)同步在同一主机上,我注意到通过绑定(bind)挂载添加文件时同步文件非常慢。

第一个 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

将小文件添加到绑定(bind)挂载到容器中的主机目录时,即使是小文件也需要大约 10 分钟才能同步。

相反,如果我 docker exec 进入容器并创建文件或文件夹,同步会立即发生。

这里有什么我遗漏的吗?

最佳答案

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

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

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

解决方法是使用一些 3rd 方工具来跟踪挂载的 windows 卷的变化并通知 Docker 容器。

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

pip install docker-windows-volume-watcher

用法也很简单:

docker-volume-watcher <container_name> C:\path\to\mounted\directory

正如文章所说:

The script will inspect all running containers and start notifying containers about changes in mounted directories. The script will also listen container start/stop events and update the list of watched directories.

关于docker - 同一主机上的两个 Docker 容器之间的慢速 Resilio 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52912061/

相关文章:

linux - BitTorrent Sync 在重启时重置设备名称

docker - Zookeeper重新启动后,Kafka群集丢失消息

amazon-web-services - Elastic Beanstalk上托管的Dockerized PHP应用程序中的错误 “python: not found”

docker - 如何使用--entrypoint和参数启动docker镜像?

docker - 带有.NetCore的Docker,我应将SDK或运行时镜像用于微服务吗?

docker - 将参数传递给Docker中的入口点

git - 有没有自动删除 .gitignore 规则的方法?