将音量挂载到OSX上的Docker镜像

在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 

我觉得我错过了一些非常简单的事情,但是我无法弄清楚。 任何帮助将不胜感激。

好的,在挖掘了GitHub公关之后 ,我find了一个办法来做到这一点。 对于未来的读者来说,这个过程应该在即将发布的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 

对于未来想要安装/ Users以外的任何人的人,在github上有一个作为gist的要点的脚本,可以为您完成整个过程,而且非常棒。 只要使用这个 。 它为我节省了很多头痛的问题,不得不继续使用virtualbox。 在运行Yosemite的Mac上testingDocker 1.3.0。

编辑:

现在docker-machine cli已经被弃用,或docker-machine,docker-machine可以这么做:

首先,进入docker-machine虚拟机并创build我们要映射到的文件夹:

 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 

最后,再次进入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上testing的。