我有一个程序需要在Windows上自动安装和pipe理一些Docker容器,只需要最less的用户input 。
它需要自动设置Docker来挂载任意的Windows文件夹。 它需要从干净的安装中完成 ,Docker虚拟机不能被假定为已经创build。
默认情况下,Docker几乎允许C:\ Users中的任何文件夹通过Boot2Docker映像进行安装,从而使其可以自行安装到Docker映像中。
我想从VM外部自动修改默认的安装脚本,以便我可以使用其他文件夹,但是“VBoxManage.exe运行”,copyto等命令不能以任何方式在Boot2Docker上运行,不像其他文件夹我有Linux虚拟机。
所以,在我寻求解决scheme的时候,我偶然发现了py-vbox,它可以让你使用VirtualBox API轻松地将键盘事件发送到控制台。 它也允许直接控制台会话,但它们像VBoxManage.exe一样失败。 所以,这个以我发送的很多结束
echo command >> /c/script.sh
键盘上的命令,以设置一个脚本,将挂载额外的卷。 有没有更好的办法?
对于任何可能需要它的人来说,这里是一个非常简化的版本。 前两位是旧的.bat文件,所以它们适用于任何人。 首先,创build我们的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
然后,dockerVM必须启动…
"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)
正如评论中所讨论的那样:
C:\Users
文件夹使用VirtualBox的sharedfolders功能与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]
。 之后您可能需要重新启动虚拟机。
在较新的Windows版本中的另一个选择是在C:\Users
文件夹内安装任何你想要的文件夹,例如C:\Users\myuser\dockerdata
。