同步文件共享

注意

同步文件共享功能适用于 Docker Desktop 4.27 及更高版本。该功能面向 Docker Pro、Team 或 Business 订阅用户开放。

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

Image of Synchronized file shares pane

它适用于谁?

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

  • 拥有大型代码仓库或包含 100,000 个或更多文件的 monorepo,总容量达数百兆字节甚至数吉字节。
  • 正在使用虚拟文件系统,例如 VirtioFS、gRPC FUSE 和 osxfs,这些系统已无法很好地适应其代码库的扩展。
  • 经常遇到性能限制。
  • 不想在修改多个容器时担心文件所有权,也不愿花时间解决冲突的文件所有权信息。

同步文件共享是如何工作的?

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

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

注意

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

重要

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

创建文件共享实例

创建文件共享实例:

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

文件共享需要几秒钟进行初始化,因为文件正在被复制到 Docker Desktop VM 中。在此期间,状态指示器显示正在准备。Docker Desktop 仪表盘的页脚中也有一个状态图标,可让您随时了解最新状态。

当状态指示器显示 正在监视文件系统更改 时,您的文件可以通过所有标准绑定挂载机制供虚拟机使用,无论是在命令行中使用 -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 中偶尔出现冲突问题指示符。这些可以忽略。但是,如果问题持续存在,您可以报告该问题。

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

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

反馈与支持

如需提供反馈或报告错误,请访问: