在OSX上将卷挂载到Docker镜像上。

7
在Mac上,如何将卷挂载到Docker容器中?
在我的Linux系统上,这很容易。当运行容器时,我只需要像这样使用命令:-v /src/webapp:/opt/webapp。但是,在Mac上情况有所不同,因为我必须运行boot2docker来在VirtualBox中运行虚拟机。我已经尝试过运行...
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

如果我忽略这个问题,仍然尝试像这样在虚拟机上挂载:
boot2docker ssh "sudo mkdir /test && sudo mount -t vboxsf Users /test"

我理解

mount: mounting Users on /test failed: No such device

我感觉自己缺少了某些非常简单的东西,但是我无法完全弄清楚。非常感谢任何帮助。


可能是Boot2Docker on Mac-访问本地文件的重复问题。 - user798377
2个回答

6

好的,经过阅读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 会解决这个问题,特别是因为我得到这些命令的 pull request 已经被合并了。
编辑:boot2docker 1.3.0 支持此功能,无需进一步更改。更新后,我运行了以下命令:
boot2docker destroy  # start over
boot2docker download # download the udpated ISO
boot2docker init
boot2docker up
# done

1
昨天发布的boot2docker版本将自动挂载您的/Users目录。 - klochner
谢谢,我已经编辑了这个答案以反映更新。 - geowa4
如果Docker for Mac在偏好设置中提供了文件共享,为什么还需要这个呢?我一直无法让它们正常工作,但我认为它们旨在提供此功能?文档对此并不清楚。 - geoidesic

3
对于未来想要挂载除 /Users 以外的任何内容的人,有个很棒的脚本在GitHub上作为gist提供,可以为您完成整个过程。只需使用这个。这使我省去了不断折腾virtualbox的麻烦。在我的Mac运行Yosemite的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。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接