繁体   English   中英

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

[英]Automatically mounting host folders other than c:\Users in Docker images in Windows

我有一个程序,该程序需要在Windows上以最少的用户输入 自动安装和管理某些Docker容器。

它需要自动设置Docker来挂载任意Windows文件夹。 它需要通过全新安装 (不能假定已创建Docker VM)来执行此操作。

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

我想要一种从VM外部自动修改默认安装脚本的方法,以便可以使用其他文件夹,但是“ VBoxManage.exe运行”,copyto等命令在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)

如评论中所述:

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

Windows较新版本中的另一个选项是仅将所需的任何文件夹装入C:\\Users文件夹内的某个位置,例如C:\\Users\\myuser\\dockerdata

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM