使用osxfs的mac docker卷挂载不起作用

Posted

技术标签:

【中文标题】使用osxfs的mac docker卷挂载不起作用【英文标题】:mac docker volume mount using osxfs not working 【发布时间】:2019-09-04 04:09:48 【问题描述】:

Docker Desktop for Mac 开始使用 osxfs 来支持 MacOS 上的卷挂载。根据their page,这样的命令应该将~/Desktop目录挂载到docker容器:

docker run -it -v ~/Desktop:/Desktop r-base bash

虽然我确实看到了 Desktop 目录,但它的内容是空的:

root@80cb534e4eeb:/# ls
bin  boot  Desktop  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@80cb534e4eeb:/# ls Desktop/
root@80cb534e4eeb:/# exit
exit 

虽然本地Desktop目录下肯定有文件

Users-MacBook-Pro:~ user$ ls Desktop/
Screen Shot 2019-03-25 at 10.34.58.png      Screen Shot 2019-03-25 at 22.26.10.png      Screen Shot 2019-03-27 at 07.34.55.png
Screen Shot 2019-03-25 at 10.35.59.png      Screen Shot 2019-03-25 at 22.26.11.png      Screen Shot 2019-03-28 at 15.14.48.png
Screen Shot 2019-03-25 at 22.26.08.png      Screen Shot 2019-03-25 at 22.47.32.png      Screen Shot 2019-04-05 at 09.26.12.png
Screen Shot 2019-03-25 at 22.26.10 1.png    Screen Shot 2019-03-27 at 07.34.33.png 

/Users 目录应该可以根据“首选项”窗口访问。似乎 docker 配置有问题,但我还没有发现任何类似的问题报告。大多数与osxfs 相关的问题都与IO 性能有关。有关如何进一步解决/调查此问题的任何想法?

【问题讨论】:

您能否尝试将运行 docker 的 vm 的根目录挂载为一个卷,看看您是否可以通过这种方式访问​​ Desktop 文件夹。类似docker run --rm -v /:/vm_root --entrypoint=sh alpine -c 'ls -l /vm_root/Users/user/Desktop' 试过了,没有文件可见。还尝试以相同的方式访问用户目录ls -l /vm_root/Users/user,我看到那里唯一的文件夹是我已经尝试挂载的文件夹(甚至一个本地不存在的文件夹)。好像VM的Users目录与本地文件系统不对应。 好吧,这很奇怪。也许尝试为 mac 重置 docker 的出厂设置?感觉就像某个地方的 mac bug 的 docker?您在首选项中配置的任何路径都有效吗? 做到了。谢谢!目前还不清楚是什么原因造成的,我在第一次安装 Docker 后就再也没有让它工作。 好吧好吧!即使我们不知道原因,我也应该写一个正确的答案吗? 【参考方案1】:

偏好设置中的 Docker 出厂重置修复了该问题,但根本原因仍然未知。解决此类问题的一种方法是批量安装 Docker for mac 使用的 linux VM 的根目录并四处寻找。这可以通过以下方式完成:

docker run --rm -v /:/vm_root --entrypoint=sh alpine -c 'ls -l /vm_root/<path in macOS>'

【讨论】:

你能澄清&lt;path in macOS&gt;的意思吗? 当然!这有点令人困惑。从 macOS 主机与 docker 共享的路径(您在 Preferences/Files shared 中看到的路径)从 macOS 挂载到运行 docker 守护程序的 linux VM 中,路径与 macOS 相同。在我的示例中,我展示了如何通过运行一个卷挂载它的容器来访问 vm 根文件系统。问题是 docker 不允许有充分的理由做-v /:/,所以我们必须将它安装在容器中的某个位置,所以我将它命名为/vm_root。尝试docker run --rm -ti -v /:/vm_root --entrypoint=sh alpine 获取外壳。希望对您有所帮助。 所以&lt;path in macOS&gt; 指的是macOS 中的一些路径,例如/Users/...【参考方案2】:

最近有人在 Mac 上的 Docker 版本中遇到类似问题,这对我来说很有帮助。 我在用 Docker 版本:20.10.10 Docker 桌面:4.2.0

在 Preferences > General 中有一个选项“使用 gRPC FUSE 进行文件共享”,默认选中。取消选中该选项应用并重新启动。

在这之后,我的 -v 选项开始正常工作,我可以轻松地在我的 Mac OS 主机和 Docker 容器之间共享文件。

【讨论】:

太棒了,谢谢!也为我工作

以上是关于使用osxfs的mac docker卷挂载不起作用的主要内容,如果未能解决你的问题,请参考以下文章

将 Kafka 连接嵌入 Ksqldb-server 时挂载(卷)不起作用

在 OSX 上将卷挂载到 Docker 映像

06-Docker-容器数据卷

docker的数据卷的作用

Docker中的数据卷

docker数据卷容器