在Windows中自动挂载Docker镜像中c:\ Users以外的主机文件夹

时间:2016-03-05 14:00:25

标签: python windows docker boot2docker

我有一个程序需要自动安装&使用最小用户输入在Windows上管理一些Docker容器。

需要自动设置Docker以挂载任意Windows文件夹。它需要从干净安装执行此操作,其中无法假定已创建Docker VM。

默认情况下,Docker几乎允许C:\ Users中的任何文件夹挂载到其Boot2Docker映像,这反过来使它们可以自己挂载到Docker映像中。

我想要一种从VM外部自动修改默认安装脚本的方法,以便我可以使用其他文件夹,但是" VBoxManage.exe运行",copyto等命令don&# 39;以任何方式使用Boot2Docker,与我拥有的其他Linux VM不同。

因此,在我寻求解决方案时,我偶然发现了py-vb​​ox,它允许您使用VirtualBox API轻松地将键盘事件发送到控制台。它还允许直接控制台会话,但它们就像VBoxManage.exe一样失败。所以,这结束了我发送了很多

echo command >> /c/script.sh

通过键盘命令以设置将安装额外卷的脚本。还有更好的方法吗?

对于任何可能需要它的人来说,这是一个非常简化的版本。前两位是旧的.bat文件,因此它们适用于任何人。首先,创建我们的docker VM:

set PATH=%PATH%;"c:\Program Files (x86)\Git\bin"
docker-machine create --driver virtualbox my-docker-vm
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" sharedfolder add "my-docker-vm" --name "c/myfolder" --hostpath "c:\myfolder" --automount
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata "my-docker-vm" VBoxInternal2/SharedFoldersEnableSymlinksCreate/c/myfolder 1

然后,必须启动docker VM ...

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" startvm --type=headless my-docker-vm
set PATH=%PATH%;"c:\Program Files (x86)\Git\bin"
docker-machine env --shell cmd my-docker-vm > temp.cmd
call temp.cmd
del temp.cmd

现在,Python脚本的简化版本使用py-vb​​ox通过键盘将简化的安装脚本写入VM:

import virtualbox
script = """\n\
echo if [ ! -d /c/myfolder ] > /c/script.sh\n\
echo then >> /c/script.sh\n\
echo     mkdir -p /c/myfolder >> /c/script.sh\n\
echo     mount -t vboxsf c/myfolder /c/myfolder >> /c/script.sh\n\
echo fi >> /c/script.sh\n\
chmod +x /c/script.sh\n\
/bin/sh /c/script.sh\n\
rm /c/script.sh\n\
"""
my_vm_name = 'my-docker-vm'

def mount_folder():
    vbox = virtualbox.VirtualBox()
    is_there = False
    for vmname in vbox.machines:
        if str(vmname) == my_vm_name:
            is_there = True
            break
    if is_there is False:
        raise whatever
        return

    vm = vbox.find_machine(my_vm_name)
    session = vm.create_session()
    session.console.keyboard.put_keys(script)

1 个答案:

答案 0 :(得分:0)

如评论中所述:

使用VirtualBox的共享文件夹功能与VM共享C:\Users文件夹。只需添加另一个共享文件夹即可。这可以通过VBoxManage sharedfolder add <uuid|vmname> --name <name> --hostpath <path> [--transient] [--readonly] [--automount]从命令行进行。您可能需要在之后重新启动VM。

较新的Windows版本中的另一个选项是在C:\Users文件夹中的某个位置安装您想要的任何文件夹,例如C:\Users\myuser\dockerdata