在 OSX 上将卷挂载到 Docker 映像
Posted
技术标签:
【中文标题】在 OSX 上将卷挂载到 Docker 映像【英文标题】:Mount volume to Docker image on OSX 【发布时间】:2014-12-08 12:16:48 【问题描述】:在 Mac 上,如何将卷挂载到 Docker 容器?
在我的 linux 机器上,这很简单。在运行容器时,我需要做的只是-v /src/webapp:/opt/webapp
。但是 Mac 不同,因为我必须运行 boot2docker 才能在 VirtualBox 中运行 VM。我试过跑步
boot2docker init
boot2docker up
boot2docker ssh # to poke around
boot2docker stop
VBoxManage sharedfolder add "boot2docker-vm" --name "Users" --hostpath /Users
boot2docker up
boot2docker ssh "sudo modprobe vboxsf"
但我明白了
modprobe: module vboxsf not found in modules.dep
如果我忽略这一点并仍然尝试像这样安装在 VM 上
boot2docker ssh "sudo mkdir /test && sudo mount -t vboxsf Users /test"
我明白了
mount: mounting Users on /test failed: No such device
我觉得我错过了一些非常简单的东西,但我无法弄清楚。任何帮助将不胜感激。
【问题讨论】:
Boot2Docker on Mac - Accessing Local Files的可能重复 【参考方案1】:好的,在挖掘了a GitHub PR 之后,我想出了一个方法来做到这一点。对于未来的读者,这个过程应该在即将发布的 boot2docker 版本中修复。
# assuming boot2docker and VirtualBox are installed
wget http://static.dockerfiles.io/boot2docker-v1.2.0-virtualbox-guest-additions-v4.3.14.iso
mv boot2docker-v1.2.0-virtualbox-guest-additions-v4.3.14.iso ~/.boot2docker/boot2docker.iso
# blow away your old boot2docker-vm if it exists (boot2docker down && boot2docker destroy)
boot2docker init
boot2docker up
# set DOCKER_HOST as instructed
boot2docker stop
VBoxManage sharedfolder add boot2docker-vm --name /Users --hostpath /Users
boot2docker up
# if you ssh into the VM now, you'll notice /Users is present, but empty; I don't know/care why.
boot2docker ssh "sudo mount -t vboxsf -o uid=1000,gid=50 /Users /Users"
# done
这对我有用,所以我希望它对其他人有用。在不久的将来,我希望 boot2docker 能够解决这个问题,特别是因为我获得这些命令的 PR 已被合并。
编辑:boot2docker 1.3.0 支持此功能,无需进一步更改。更新后,我运行了这些命令:
boot2docker destroy # start over
boot2docker download # download the udpated ISO
boot2docker init
boot2docker up
# done
【讨论】:
昨天发布的boot2docker版本会自动挂载你的/Users目录 谢谢,我已编辑此答案以反映更新。 如果 Docker for Mac 在首选项中提供文件共享,为什么需要这样做?我无法让它们工作,但我认为它们旨在提供此功能?文档对此并不清楚。【参考方案2】:对于那些将来想要挂载除 /Users 以外的任何东西的人来说,有人在 github 上制作了一个脚本作为要点,它可以为你完成整个过程,非常棒。只需使用this。它让我不用再纠结于 virtualbox 了。这是在我运行 Yosemite 的 Mac 上从 Docker 1.3.0 开始测试的。
编辑:
现在 docker-machine cli 已被弃用,取而代之的是 docker-machine,以下是使用 docker-machine 的方法:
首先,通过 ssh 进入 docker-machine 虚拟机并创建我们将要映射到的文件夹:
docker-machine ssh $MACHINE_NAME "sudo mkdir -p \"$VOL_DIR\""
现在将文件夹共享到 VirtualBox:
WORKDIR=$(basename "$VOL_DIR")
vboxmanage sharedfolder add "$MACHINE_NAME" --name "$WORKDIR" --hostpath "$VOL_DIR" --transient
最后,再次 ssh 进入 docker-machine 并挂载我们刚刚共享的文件夹:
docker-machine ssh $MACHINE_NAME "sudo mount -t vboxsf -o uid=\"$U\",gid=\"$G\" \"$WORKDIR\" \"$VOL_DIR\""
注意:对于 UID 和 GID,您基本上可以使用任何整数,只要它们尚未被占用。
这是在 OS X El Capitan 上从 docker-machine 0.4.1 和 docker 1.8.3 开始测试的。
【讨论】:
以上是关于在 OSX 上将卷挂载到 Docker 映像的主要内容,如果未能解决你的问题,请参考以下文章