文件系统挂载规则构成了 组织文件系统访问策略。每条规则列出沙箱可以 作为工作区挂载的主机路径,以及它允许或拒绝对这些路径的访问:read、write,或者 两者。要向策略中添加规则,请参阅 创建和管理组织策略。
当沙箱挂载工作区时,Docker Sandboxes 会针对该挂载所需的访问把这些路径与这些规则 进行比对。只读工作区只需要 read。可写工作区同时需要 read 和 write,因此该路径 必须对两种操作都被允许。
路径模式
主目录
~ 在每个平台上都会展开为用户的主目录,包括 Windows,在那里它解析为 %USERPROFILE%。因此,一条 ~/** 规则可以匹配 macOS、Linux 和 Windows 上每个用户的 主目录树。请在每个平台上都用正斜杠书写 ~,例如 ~/**,Windows 也一样。策略引擎 只展开 ~:它不展开环境变量,因此 %USERPROFILE%\** 或 $HOME/** 这样的模式什么 都匹配不到。
操作系统格式
对于主目录之外的路径,请按用户操作系统使用的格式书写。macOS 或 Linux 路径不匹配 Windows 或 WSL 路径,因此多个平台共享的位置需要为每个平台各写一条规则:
| 操作系统 | 示例路径 |
|---|---|
| macOS、Linux | /data/project/** |
| Windows | C:\data\project\** |
| WSL | \\wsl.localhost\<distro>\data\project\** |
在 Windows 上,*: 匹配任意盘符,因此 *:\data\** 可以匹配任意驱动器上的路径。
通配符
通配符在每种路径格式中的行为都相同:
| 模式 | 示例 | 匹配 |
|---|---|---|
| 精确路径 | /data | 仅 /data |
| 路径段通配符 | /data/* | /data/project,仅一个路径段,不含子目录 |
| 递归通配符 | /data/** | /data/project、/data/project/src,任意深度 |
例如,~/** 匹配主目录下的所有路径,而 ~/* 只匹配它的直接子项。
大小写和分隔符
匹配会忽略路径书写方式的某些差异:
| 差异 | 是否忽略 | 示例 |
|---|---|---|
| 斜杠方向 | 是,但 ~ 之后除外 | C:/data/** 和 C:\data\** 是同一个 |
| Windows 驱动器和 UNC 路径(包括 WSL)中的大小写 | 是 | C:\Data\** 匹配 c:\data\project |
| macOS 和 Linux 路径中的大小写 | 否 | /Data/** 不匹配 /data/project |
| WSL 前缀 | 是 | \\wsl$\ 和 \\wsl.localhost\ 是同一个 |
即使在大小写不敏感的卷上,macOS 路径也区分大小写,因此请按磁盘上目录名的大小写书写 规则。
挂载路径如何解析
Docker Sandboxes 会用解析后的工作区路径与规则进行比对,而不是开发者传给 sbx run 或 sbx create 的路径。它会展开 ~、把路径转为绝对路径、去掉 . 和 .. 路径段, 并按如下方式解析路径:
| 开发者传入 | 用于比对的路径 |
|---|---|
相对路径,例如 . | 绝对路径 |
| 符号链接 | 链接指向的目标 |
由于符号链接会被跟随,因此位于允许路径之下的链接,如果指向没有任何规则允许的目录, 就会被拒绝。