在OSX上手动共享目录作为docker volume mount point

时间:2016-02-17 00:28:01

标签: macos docker docker-machine docker-volume

根据此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托管泊坞窗(此处为virtualbox)共享目录,以将其用作卷安装点?

这是我在弃用之前使用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 已弃用,我没有找到如何使用我现在必须使用的虚拟机(它使用虚拟机)。

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

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

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

但我现在怎么办?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

我是docker的初学者,我想了解更多关于这个神奇的工具,以便在我工作的公司投入生产,但是,我正在努力提高工作效率,而我正在开发我的网络系统。通过这种方式,我想将存储在OSX本地文件夹中的Web应用程序文件共享到在NGINX中运行的容器,以便在不浪费时间的情况下轻松进行测试。然后我在互联网上找到了一个解决方案,我将在下面向您详细说明。

首先,打开 Virtual Box App ,点击泊坞窗虚拟机,然后选择设置选项。

Settings

其次,转到共享文件夹标签,选择计算机文件夹部分下的用户项,或者您可以添加新共享它还不存在。 在文件夹路径中写入/用户(OSX本地文件夹的路径),文件夹名称中的用户,并检查自动挂载永久选项是否都<强>检查

Shared Preferences

确认方框并关闭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做同样的事情,但速度更快......也可以尝试这个。

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

祝你好运!