同步文件共享

注意

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

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

Image of Synchronized file shares pane

适用于谁?

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

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

同步文件共享如何工作?

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

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

注意

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

重要

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

创建文件共享实例

要创建文件共享实例

  1. 登录 Docker Desktop。
  2. 在 **设置** 中,导航到 **资源** 部分中的 **文件共享** 选项卡。
  3. 在 **同步文件共享** 部分,选择 **创建共享** 图标。
  4. 选择要共享的主机文件夹。同步文件共享应初始化并可用。

文件共享需要几秒钟才能初始化,因为文件被复制到 Docker Desktop 虚拟机中。在此期间,状态指示器会显示 **准备中**。Docker 仪表板的页脚中也有一个状态图标,可让您保持更新。

当状态指示器显示 **监视文件系统更改** 时,您的文件将通过所有标准绑定挂载机制提供给虚拟机,无论是命令行中的 -v 还是在 compose.yml 文件中指定。

注意

当您创建新服务时,将 绑定挂载选项一致性 设置为 :consistent 会绕过同步文件共享。

提示

Compose 现在可以自动为绑定挂载创建文件共享。确保您已使用付费订阅登录 Docker,并且已在 Docker Desktop 的设置中启用 **访问实验性功能** 和 **使用 Compose 管理同步文件共享**。

探索您的文件共享实例

**同步文件共享** 部分显示所有文件共享实例,并提供有关每个实例的有用信息,包括

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

选择文件共享实例会展开下拉菜单并显示此信息。

使用 .syncignore

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

您可能想要添加到 .syncignore 文件中的一些示例包括

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

一般来说,使用 .syncignore 文件来排除对工作流不重要的项目,特别是那些同步缓慢或占用大量存储空间的项目。

已知问题

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

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

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

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

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

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

反馈和支持

要提供反馈或报告错误,请访问