[英]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-vbox,它使您可以使用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-vbox通过键盘将简化的安装脚本写入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.