同步文件共享

注意

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

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

Image of Synchronized file shares pane

目标用户?

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

  • 拥有大型代码库或单体代码库,包含10万个或更多文件,总大小数百兆字节甚至几吉字节。
  • 使用虚拟文件系统,例如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 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环境变量。

反馈和支持

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