在OSX上将卷装载到Docker镜像

时间:2014-10-13 20:28:41

标签: macos docker mount boot2docker

在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

我觉得我错过了一些非常简单的东西,但我无法弄明白。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:6)

好的,经过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

答案 1 :(得分:3)

对于那些想要在/ Users之外安装任何东西的人来说,有一个人在github上作为要点制作的脚本为你做了整个过程并且非常棒。只需使用this即可。它让我不得不一直不停地使用virtualbox。这是在运行Yosemite的Mac上从Docker 1.3.0开始测试的。

修改

既然docker-machine cli已经被弃用了,或者是docker-machine,这就是你如何用docker-machine做到的:

首先,ssh进入docker-machine vm并创建我们要映射到的文件夹:

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上测试的。