【问题标题】:Manually sharing directory as docker volume mounting point on OSX手动共享目录作为 OSX 上的 docker 卷挂载点
【发布时间】:2016-02-17 00:28:00
【问题描述】:

根据这个tutorial from docker website当你启动一个容器时,它会自动分享你的/Users/username

我目前的问题:

但在我的学校我的$HOME 不在/Users 中,当我尝试使用docker run -d -P -v $HOME/site:/usr/share/nginx/html --name mysite nginx 之类的东西直接在我的容器上挂载卷时(如链接中的教程),我无法更改文件通过已安装的卷。所以我猜我的$HOME 不会自动共享。

但如果我运行 docker instpect mysite 我会得到:

"HostConfig": {
    "Binds": [
        "/nfs/zfs-student-3/users/vmonteco/site:/usr/share/nginx/html"
    ],

"Mounts": [
    {
        "Source": "/nfs/zfs-student-3/users/vmonteco/site",
        "Destination": "/usr/share/nginx/html",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    } 

我的问题很简单:

如何手动与 VM 托管 docker(此处为虚拟盒)共享目录以将其用作卷安装点?

这就是我在 Boot2docker 被弃用之前的做法:

使用 boot2docker 我可以运行类似的东西:

SHAREDIR=$HOME/share
# creating share folder.
mkdir $SHAREDIR

# mount shared folder while relaunching boot2docker :
boot2docker --vbox-share="$SHAREDIR=share" up
echo "Creating and mounting \"share\" directory in boot2docker VM."
boot2docker ssh "sudo mkdir /share; sudo mount -t vboxsf share /share"

# running the container :
docker run  -ti --rm -v /share:/share -v /Users:/Users base/archlinux sh

而且效果很好。

但现在 boot2docker弃用,我没有找到如何使用我现在必须使用的 VM(它使用 virtualbox)来执行此操作。

如果我理解得很好,它应该和 boot2docker 一样工作:

                       1                                                  2
[directory from OSX] <===> [VM directory (the VM replaces Boot2docker)] <===> [container directory]

如果我仍然理解得很好,那么现在唯一不起作用的是 [1],这是由我刚刚与 boot2docker 共享的小脚本的中间部分处理的。

但我现在该怎么办?

【问题讨论】:

    标签: macos docker docker-machine docker-volume


    【解决方案1】:

    看到这个答案: https://stackoverflow.com/a/32030385/2434234

    总结: 从 docker 1.8 开始,您可以通过 vbox cli 添加目录。

    VBoxManage sharedfolder add <machine name/id> --name <mount_name> --hostpath <host_dir> --automount
    

    【讨论】:

    • 这工作:) 谢谢!我实际上发现这几乎以相同的方式工作。我冒昧地将我的新脚本添加到您的答案中。
    【解决方案2】:

    我是 docker 的初学者,我想了解更多关于这个令人惊叹的工具在我工作的公司投入生产的信息,但是,我在开发我的 Web 系统时试图提高生产力。通过这种方式,我想将存储在 OSX 本地文件夹中的 Web 应用程序文件共享到我在 NGINX 中运行的容器中,以便同时轻松测试,而不会浪费时间。然后我在互联网上找到了一个解决方案,我将在下面详细介绍给您。

    首先,打开Virtual Box App,点击docker虚拟机,选择Settings选项。

    其次,转到共享文件夹选项卡,选择机器文件夹部分下的用户项,或者您可以添加一个新的共享,如果它还不存在。 在文件夹路径(OSX 本地文件夹的路径)中写入 /Users,在文件夹名称中写入用户并检查 Auto-MountMake Permanent 选项是否都是 检查

    确认框并关闭 Virtual Box 应用程序窗口。

    重要的是,重启你的 docker 虚拟机。

    可以使用以下命令重启:

    docker-machine restart
    

    最后,您只需要使用以下命令启动您的容器:

    docker run -it -v Local-OSX-Path:Container-Path container-name /bin/bash
    

    例子:

    docker run -it -v /Users/username/Documents/Workspaces/www:/var/www/html -p 8080:80 debian-nginx:1.0 /bin/bash
    

    当您访问您的容器时,可以轻松地查看您在本地 OSX 目录中的文件。

    我在另一个 question 中找到了另一个解决方案 - 名为 docker-osx-dev 的开源项目 - 使用 Boot2Docker + rsync 来做同样的事情,但速度更快......也可以试试这个。

    我希望这些信息足以解决您的问题。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 1970-01-01
      • 2018-05-31
      • 2023-04-09
      • 2014-12-08
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 2016-03-12
      相关资源
      最近更新 更多