坐骑被拒绝。这些路径...不与 OS X 共享,并且 Docker 不知道

2023-11-26

命令docker run -v /var/folders/zz/...产生以下错误。

docker: Error response from daemon: Mounts denied: 
The paths /var/folders/zz/... and /var/folders/zz/...
are not shared from OS X and are not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.

当我打开文件共享时,我看到 /private 已列出。

如果我尝试添加/var/folder/,它决定/private/var/folders,它是 /private 的子集,因此添加被拒绝。

总而言之,在我看来,它就像目录/var/folders/..由 OS X 作为子目录共享/private因此 Docker 必须知道。任何有关解决此问题的帮助将不胜感激。

作为实验,我替换了/private在文件共享中/private/var/folders并重新启动docker,但结果没有改变。

只是为了更完整的参考,这是.sh脚本,运行这个Python脚本,它又运行 docker 命令。


适用于 Mac 的 Docker卷挂载的行为与基本 Docker 系统不同。这主要是因为 Docker 试图遵守 Apple 的文件系统沙箱指南。

如 Docker 首选项中所示,macOS 仅导出某些路径。

  • /Users
  • /Volumes
  • /tmp
  • /private

File Sharing preference panel

/var在 macOS 中是一个符号链接/private。对于/tmp:

$ ls -ld /tmp /var
lrwxr-xr-x@ 1 root  wheel  11 Jan 26 16:18 /tmp -> private/tmp
lrwxr-xr-x@ 1 root  wheel  11 Jan 26 16:18 /var -> private/var

Why is /tmp列在共享面板中,但是/var不是(尽管两者都是/private)?适用于 Mac 的 Docker有关文件系统名称空间的文档解释:

默认情况下,您可以在以下位置共享文件/Users/, /Volumes/, /private/, and /tmp直接地。要添加或删除导出到 Docker 的目录树,请使用 Docker 首选项鲸鱼中的文件共享选项卡 菜单 -> 首选项 -> 文件共享。 (请参阅首选项。)

中使用的所有其他路径-v绑定挂载源自运行 Docker 容器的 Moby Linux VM,所以诸如此类的论点-v /var/run/docker.sock:/var/run/docker.sock应该按预期工作。如果 macOS 路径未共享并且虚拟机中不存在,则尝试绑定挂载该路径将会失败,而不是在虚拟机中创建它。VM 中已存在且包含文件的路径由 Docker 保留,无法从 macOS 导出。

注意/var/run此处特别提到的是从 Linux VM 而不是从 macOS 挂载的位置。

当您请求挂载卷时,首先检查 macOS 文件系统导出。如果没有匹配,则接下来检查运行 Docker 的 Linux 虚拟机。如果它们都没有您请求的路径,则挂载失败。

就你而言,/varmacOS 不导出。/var存在于 Linux VM 中,但是/var/folders才不是。因此路径不可用,挂载失败。

如果您将路径更改为/private/var,那么就会成功,因为macOS导出了整个/private用于安装的文件系统树。

为了使事情更加可移植,您可能需要测试当前正在运行的平台,如果是 macOS,请在安装路径前添加前缀/private.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

坐骑被拒绝。这些路径...不与 OS X 共享,并且 Docker 不知道 的相关文章

随机推荐