簡體   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