同步文件共享

注意

同步文件共享适用于 Docker Desktop 版本 4.27 及更高版本。它适用于拥有 Docker Pro、Team 或 Business 订阅的客户。

同步文件共享是一种替代文件共享机制,它提供快速灵活的主机到 VM 文件共享,通过使用同步文件系统缓存来增强绑定挂载性能。

Image of Synchronized file shares pane

它适用于谁?

同步文件共享非常适合以下开发人员:

  • 拥有具有 100 000 个或更多文件的大型存储库或 monorepo,总计数百兆字节甚至千兆字节。
  • 正在使用虚拟文件系统,例如 VirtioFS、gRPC FUSE 和 osxfs,这些系统不再能够很好地扩展其代码库。
  • 经常遇到性能限制。
  • 在修改多个容器时,不想担心文件所有权或花时间解决冲突的文件所有权信息。

同步文件共享的工作原理是什么?

同步文件共享的行为与虚拟文件共享类似,但利用高性能、低延迟的代码同步引擎在 Docker 桌面虚拟机内的 ext4 文件系统上创建主机文件的同步缓存。如果您在主机或 VM 的容器中对文件系统进行更改,它将通过双向同步传播。

创建文件共享实例后,任何使用绑定挂载的容器(如果该挂载指向主机文件系统上与指定的同步文件共享位置匹配的位置或其中的子目录),都将使用同步文件共享功能。不满足此条件的绑定挂载将传递给正常的虚拟文件系统绑定挂载机制,例如 VirtioFS 或 gRPC-FUSE。

注意

Docker Desktop 中的 Kubernetes 卷不使用同步文件共享。hostPath

重要

同步文件共享在 WSL 上或使用 Windows 容器时不可用。

创建文件共享实例

要创建文件共享实例:

  1. 登录到 Docker Desktop。
  2. Settings (设置) 中,导航到 Resources (资源) 部分中的 File sharing (文件共享) 选项卡。
  3. Synchronized File Shares 部分中,选择 Create share 图标。
  4. 选择要共享的主机文件夹。同步的文件共享应已初始化并可用。

文件共享需要几秒钟才能初始化,因为文件将复制到 Docker Desktop VM 中。在此期间,状态指示灯显示 Preparing (正在准备)。Docker Desktop Dashboard 的页脚中还有一个状态图标,可让您保持最新状态。

当状态指示器显示 Watching for filesystem changes (正在监视文件系统更改) 时,您的文件可通过所有标准绑定挂载机制提供给 VM,无论是在命令行中还是在文件中指定。-vcompose.yml

注意

创建新服务时,将绑定挂载选项 consistency 设置为绕过 Synchronized file shares。:consistent

提示

Compose 现在可以自动为绑定挂载创建文件共享。 确保您已使用付费订阅登录到 Docker,并且已在 Docker Desktop 的设置中启用了 Access experimental featuresManage Synchronized file shares with Compose

浏览您的文件共享实例

Synchronized file shares 部分显示您的所有文件共享实例,并提供有关每个实例的有用信息,包括:

  • 文件共享内容的来源
  • 状态更新
  • 每个文件共享使用的空间量
  • 文件系统条目计数的数量
  • 符号链接的数量
  • 哪些容器正在使用文件共享实例

选择文件共享实例将展开下拉列表并显示此信息。

使用 .syncignore

您可以在每个文件共享的根目录中使用一个文件,以便从文件共享实例中排除本地文件。它支持与文件相同的语法,并排除和/或重新包含同步路径。 在文件共享的根目录以外的任何位置都会忽略文件。.syncignore.dockerignore.syncignore

您可能希望添加到文件中的一些内容示例包括:.syncignore

  • 大型依赖项目录,例如目录(除非您依赖通过绑定挂载访问它们)node_modulescomposer
  • .git目录(同样,除非您需要它们)

通常,使用文件可以排除对工作流程不重要的项目,尤其是那些同步速度较慢或占用大量存储空间的项目。.syncignore

已知问题

  • 除非重新创建文件共享,否则所做的更改不会导致立即删除。换句话说,由于文件中的修改而新忽略的文件将保留在其当前位置,但在同步期间不再更新。.syncignore.syncignore

  • 文件共享实例当前限制为每个共享大约 200 万个文件。为了获得最佳性能,如果您有此大小的文件共享实例,请尝试将其分解为对应于各个绑定挂载位置的多个共享。

  • 由于 Linux 区分大小写,而 macOS/Windows 仅保留大小写,因此大小写冲突在 GUI 中显示为“文件存在”问题。这些可以忽略。但是,如果它们仍然存在,您可以报告问题。

  • 同步文件共享会主动报告临时问题,这可能会导致在同步期间 GUI 中偶尔出现 ConflictProblem 指示器。这些可以忽略。但是,如果它们仍然存在,您可以报告问题。

  • 如果您在 Windows 上从 WSL2 切换到 Hyper-V,则需要完全重新启动 Docker Desktop。

  • 不支持 POSIX 样式的 Windows 路径。避免在 Docker Compose 中设置 COMPOSE_CONVERT_WINDOWS_PATHS 环境变量。

反馈和支持

要提供反馈或报告 bug,请访问: