命令 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 命令。
原文由 Aayush 发布,翻译遵循 CC BY-SA 4.0 许可协议
Docker for Mac 卷挂载的行为与基本 Docker 系统不同。这主要是因为 Docker 试图遵守 Apple 的文件系统沙箱指南。
如 Docker 的首选项中所示,macOS 仅导出某些路径。
/Users
/Volumes
/tmp
/private
/var
在 macOS 中是指向/private
的符号链接。/tmp
也是如此:为什么
/tmp
列在共享面板中,但/var
没有(即使两者都是/private
的一部分)? Docker for Mac 关于文件系统命名空间的文档 解释说:请注意,此处特别提到
/var/run
作为将从 Linux VM 而非 macOS 安装的位置。当您要求安装卷时,首先检查 macOS 文件系统导出。如果那里没有匹配,接下来检查运行 Docker 的 Linux VM。如果它们都没有您请求的路径,则安装失败。
在您的情况下,macOS 不会导出
/var
。/var
存在于 Linux VM 中,但/var/folders
不存在。因此,路径不可用,挂载失败。如果将路径更改为
/private/var
,那么它会成功,因为 macOS 会导出整个/private
文件系统树进行挂载。为了使事情更便携,您可能需要测试您当前运行的平台,如果是 macOS,请在挂载路径前加上
/private
。