使用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>'
【讨论】:
你能澄清<path in macOS>
的意思吗?
当然!这有点令人困惑。从 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
获取外壳。希望对您有所帮助。
所以<path in macOS>
指的是macOS 中的一些路径,例如/Users/...
等【参考方案2】:
最近有人在 Mac 上的 Docker 版本中遇到类似问题,这对我来说很有帮助。 我在用 Docker 版本:20.10.10 Docker 桌面:4.2.0
在 Preferences > General 中有一个选项“使用 gRPC FUSE 进行文件共享”,默认选中。取消选中该选项应用并重新启动。
在这之后,我的 -v 选项开始正常工作,我可以轻松地在我的 Mac OS 主机和 Docker 容器之间共享文件。
【讨论】:
太棒了,谢谢!也为我工作以上是关于使用osxfs的mac docker卷挂载不起作用的主要内容,如果未能解决你的问题,请参考以下文章