python - 自动挂载除c :\Users in Docker images in Windows以外的主机文件夹

标签 python windows docker boot2docker

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

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

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

我想要一种从 VM 外部自动修改默认挂载脚本的方法,以便我可以使用其他文件夹,但是“VBoxManage.exe run”、copyto 等命令在 Boot2Docker 上无论如何都不起作用,与我拥有的其他 Linux VM 不同。

因此,在寻求解决方案的过程中,我偶然发现了 py-vb​​ox,它可以让您使用 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-vb​​ox 通过键盘将简化的挂载脚本写入 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/

相关文章:

python - Selenium 如何在某些目标类中获取href的内容

java - 脚本文件无法创建Java Jar文件

c++ - 使用cmake创建UWP软件包

windows - OS线程调度与cpu使用关系

templates - 如果标签名称中包含 ".",我如何获取 Docker 镜像的标签?

python - Matplotlib pyplot - 刻度控件和显示日期

python - 如何在python中拟合两项指数?

python - 如何从 python 运行 MS Access 宏

MacOS Kitematic 如何配置卷

postgresql - 带有卷的 dockerized postgresql