Docker:Mounts被拒绝。 path…不是从OS X共享的,Docker不知道
命令docker运行-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.
当我打开文件共享,我看到/私人已经列出。
如果我尝试添加/ var / folder /,它会parsing为/ private / var / folders,这是/ private的子集,因此添加被拒绝。
总而言之,在我看来,像/ var / folders /这样的目录是OS X作为/ private的一个子目录共享的,因此必须为Docker所知。 任何帮助解决这个将不胜感激。
作为一个实验,我用/ private / var / foldersreplace了文件共享中的/ private,并重新启动了docker,但结果没有改变。
只是为了更完整的参考,这是运行这个python脚本的.sh脚本 ,它运行docker命令。
用于Mac卷装载的Docker与基本Docker系统的行为不同。 这主要是因为Docker试图遵守苹果的文件系统沙箱准则。
如Docker的首选项所示,macOS仅导出某些path。
-
/Users
-
/Volumes
-
/tmp
-
/private
/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
为什么/tmp
在共享面板中列出,但是/var
不是(即使它们都是/private
的一部分)? Docker for Mac 有关文件系统命名空间的文档解释:
默认情况下,您可以直接共享
/Users/
,/Volumes/
,/private/
和/tmp
。 要添加或删除导出到Docker的目录树,请使用Docker首选项whale菜单 – >首选项 – >文件共享中的文件共享选项卡。 (请参阅首选项。)在
-v
绑定挂载中使用的所有其他path来源于运行Docker容器的Moby Linux VM,因此参数(如-v /var/run/docker.sock:/var/run/docker.sock
应该按预期工作。 如果一个macOSpath不共享并且不存在于虚拟机中,绑定的尝试将失败,而不是在虚拟机中创build。 VM中已经存在并包含文件的path由Docker保留,不能从macOS导出。
请注意, /var/run
在这里被特别提到,将作为一个从Linux VM挂载的地方,而不是从macOS挂载。
当你要求卷挂载时,首先检查macOS文件系统导出。 如果没有匹配的话,运行Docker的Linux VM将会被检查。 如果他们都没有你请求的path,那么挂载失败。
在你的情况下, /var
不会被macOS导出。 /var
存在于Linux VM中,但/var/folders
不存在。 因此,该path不可用,并且挂载失败。
如果将path更改为/private/var
,则path将成功,因为macOS会导出整个/private
文件系统树以进行装载。
为了使事情更具可移植性,您可能需要testing当前正在运行的平台,如果是macOS,则使用/private
前缀安装path。