我有一个程序需要自动在 Windows 上使用最少的用户输入安装和管理一些 Docker 容器。
它需要自动设置 Docker 来挂载任意 Windows 文件夹。它需要从 全新安装 中执行此操作,不能假定已创建 Docker VM。
默认情况下,Docker 将允许 C:\Users 中的几乎所有文件夹挂载到其 Boot2Docker 镜像,这反过来又使它们可以自己挂载到 Docker 镜像中。
我想要一种从 VM 外部自动修改默认挂载脚本的方法,以便我可以使用其他文件夹,但是“VBoxManage.exe run”、copyto 等命令在 Boot2Docker 上无论如何都不起作用,与我拥有的其他 Linux VM 不同。
因此,在寻求解决方案的过程中,我偶然发现了 py-vbox,它可以让您使用 VirtualBox API 轻松地将键盘事件发送到控制台。它还允许直接控制台 session ,但它们会像 VBoxManage.exe 一样失败。所以,最后我发送了很多
echo command >> /c/script.sh
通过键盘命令来设置一个脚本来安装额外的卷。有没有更好的办法?
对于任何可能需要它的人,这里有一个非常简化的版本。前两位是旧的 .bat 文件,因此它们适用于任何人。首先,创建我们的 docker 虚拟机:
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 虚拟机必须启动...
"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
现在,使用 py-vbox 通过键盘将简化的挂载脚本写入 VM 的 Python 脚本的简化版本:
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]
.之后您可能需要重新启动 VM。
在较新的 Windows 版本中,另一个选项是在 C:\Users
中的某处安装您想要的任何文件夹。文件夹,例如C:\Users\myuser\dockerdata
.
关于python - 自动挂载除c :\Users in Docker images in Windows以外的主机文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35815034/