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

use*_*984 5 macos mount docker

Docker Desktop for Mac 开始osxfs用于在 MacOS 上支持卷安装。根据他们的页面,这样的命令应该将~/Desktop目录挂载到 docker 容器:

docker run -it -v ~/Desktop:/Desktop r-base bash
Run Code Online (Sandbox Code Playgroud)

虽然我确实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 
Run Code Online (Sandbox Code Playgroud)

虽然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 
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

Mat*_*man 6

偏好设置中的 Docker 工厂重置解决了该问题,但根本原因仍未知。解决此类问题的一种方法是卷挂载 Docker for mac 使用的 Linux VM 的根目录并进行查看。这可以通过以下方式完成:

docker run --rm -v /:/vm_root --entrypoint=sh alpine -c 'ls -l /vm_root/<path in macOS>'
Run Code Online (Sandbox Code Playgroud)

  • 当然!这有点令人困惑。从 macOS 主机与 docker 共享的路径(您在“首选项/共享文件”中看到的路径)从 macOS 挂载到运行 docker 守护程序的 Linux VM,路径与 macOS 中的路径相同。在我的示例中,我展示了如何通过运行卷安装的容器来访问虚拟机根文件系统以进行探索。问题是 docker 有充分的理由不允许执行“-v /:/”,因此我们必须将其安装在容器中的某个位置,因此我将其命名为“/vm_root”。尝试“docker run --rm -ti -v /:/vm_root --entrypoint=sh alpine”来获取 shell。希望有帮助。 (2认同)