【发布时间】:2014-08-04 10:06:11
【问题描述】:
我刚刚在我的 Mac 上设置了 boot2docker。如何在我的 Mac 上挂载一个本地目录,以便它可以一直访问到正在运行的 Docker 容器?感谢您的帮助!
【问题讨论】:
-
查看 boot2docker 文档,其中有一些关于此的内容。
标签: macos docker boot2docker
我刚刚在我的 Mac 上设置了 boot2docker。如何在我的 Mac 上挂载一个本地目录,以便它可以一直访问到正在运行的 Docker 容器?感谢您的帮助!
【问题讨论】:
标签: macos docker boot2docker
boot2docker 和 VirtualBox Guest Additions
如何将 /Users 挂载到 boot2docker
tl;dr 使用 VirtualBox Guest 构建您自己的自定义 boot2docker.iso 添加(见link)或下载 http://static.dockerfiles.io/boot2docker-v1.0.1-virtualbox-guest-additions-v4.3.12.iso 并将其保存到 ~/.boot2docker/boot2docker.iso。
【讨论】:
截至 2014 年 10 月 16 日,Docker 支持无缝挂载 /Users 路径中的目录。
来自Docker blog:
在此版本中,我们解决了最常见的问题:在 Mac 和容器之间共享目录。使用 Docker 1.3 和相应版本的 boot2docker,主机挂载的卷现在可以按照您期望的方式工作。
...注意还是有一些限制:比如这个功能仅限于boot2docker的virtualbox配置,不能动态管理,只适用于 /Users 中的目录。但我们收到了令人振奋的贡献来改进卷管理,因此预计该领域将在接下来的几个版本中大幅改进。
示例用法:
$ docker run -v /Users/bob/myapp/src:/src [...]
【讨论】:
gcloud 工具需要 boot2docker,甚至没有提供将命令行参数传递给 Docker 的方法。
见https://github.com/boot2docker/boot2docker/issues/678。
与 VM 共享您的文件夹:
VBoxManage sharedfolder add boot2docker-vm --name /tmp/Work --hostpath /CODE --automount
根据在bootscript.sh 上找到的信息,您知道VM 将运行bootlocal.sh 脚本,该脚本位于/var/lib/boot2docker 文件夹中,数据将保存在该文件夹中。
添加文件/var/lib/boot2docker/bootlocal.sh
#!/bin/sh
# bash is not available!
mkdir -p /CODE
mount -t vboxsf /tmp/Work /CODE
然后chmod +x /var/lib/boot2docker/bootlocal.sh 并重新启动您的boot2docker-vm 虚拟机。
【讨论】:
正如 Levi 所说,/Users 目录是自动挂载的。这在 boot2docker 和 docker-machine 中都是如此。也就是说,如果你想在 /Users 之外挂载任何东西,所有当前的答案都是关于 Boot2docker。由于现在不赞成使用 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 开始测试的。
【讨论】: