7

在 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

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

4

2 回答 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 能够解决这个问题,特别是因为我获得这些命令的 PR 已被合并。

编辑:boot2docker 1.3.0 支持这一点,无需任何进一步的更改。更新后,我运行了以下命令:

boot2docker destroy  # start over
boot2docker download # download the udpated ISO
boot2docker init
boot2docker up
# done
于 2014-10-15T15:26:22.230 回答
3

对于将来发现这个并且想要挂载除 /Users 以外的任何东西的人来说,有人在 github 上制作了一个脚本作为要点,它为你完成了整个过程,非常棒。就用这个。它让我不用再纠结于 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 开始测试的。

于 2014-12-18T07:06:28.983 回答