【问题标题】:Boot2Docker on Mac - Accessing Local FilesMac 上的 Boot2Docker - 访问本地文件
【发布时间】:2014-08-04 10:06:11
【问题描述】:

我刚刚在我的 Mac 上设置了 boot2docker。如何在我的 Mac 上挂载一个本地目录,以便它可以一直访问到正在运行的 Docker 容器?感谢您的帮助!

【问题讨论】:

  • 查看 boot2docker 文档,其中有一些关于此的内容。

标签: macos docker boot2docker


【解决方案1】:

boot2docker 和 VirtualBox Guest Additions
如何将 /Users 挂载到 boot2docker

https://medium.com/boot2docker-lightweight-linux-for-docker/boot2docker-together-with-virtualbox-guest-additions-da1e3ab2465c

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。

【讨论】:

    【解决方案2】:

    截至 2014 年 10 月 16 日,Docker 支持无缝挂载 /Users 路径中的目录。

    来自Docker blog

    在此版本中,我们解决了最常见的问题:在 Mac 和容器之间共享目录。使用 Docker 1.3 和相应版本的 boot2docker,主机挂载的卷现在可以按照您期望的方式工作。

    ...注意还是有一些限制:比如这个功能仅限于boot2docker的virtualbox配置,不能动态管理,只适用于 /Users 中的目录。但我们收到了令人振奋的贡献来改进卷管理,因此预计该领域将在接下来的几个版本中大幅改进。

    示例用法: $ docker run -v /Users/bob/myapp/src:/src [...]

    【讨论】:

    • Linux 也支持这个吗? Google 的 gcloud 工具需要 boot2docker,甚至没有提供将命令行参数传递给 Docker 的方法。
    • 我只在 Linux 上原生使用过 Docker,所以我不确定。可能值得打开一个单独的问题。
    • 这仅在目录位于您的用户文件夹内时才有效。如果不是(例如,如果它在另一个硬盘上),这将不起作用。
    • 它可以工作,但你必须知道virtualbox共享文件夹非常慢。最好配置一个标准的网络共享文件夹。
    • 要使用 Docker-toolbox 在 Docker 1.8 上运行,我必须使用完整路径。 docker run -v ./dir:/dir [..] 不起作用。然而 docker run -v /Users/bob/dir:/dir [..] 做到了。
    【解决方案3】:

    boot2docker 与 /Users 以外的共享

    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 虚拟机。

    【讨论】:

      【解决方案4】:

      正如 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 开始测试的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多