2016-03-05 10 views
8

Mam program, który musi automatycznie zainstalować & zarządzać kilka pojemników dokowane na Windows z minimalnym udziale użytkownika.automatycznego montowania foldery gospodarza innych niż C: Users w obrazach Döcker w Windows

To musi być automatycznie konfiguracja Docker do montowania dowolnych folderów systemu Windows. Musi to zrobić z czystej instalacji, gdzie nie można założyć, że maszyna wirtualna Docker została utworzona.

Docker domyślnie pozwala niemal każdemu folderowi w C: \ Users na zamontowanie jego obrazu Boot2Docker, co z kolei umożliwia ich podłączenie do samych obrazów Docker.

Chciałbym automatycznie zmodyfikować domyślny skrypt montowania spoza VM, aby móc używać innych folderów, ale polecenia "VBoxManage.exe uruchom", copyto itp. Nie działają na Boot2Docker w żadnym w przeciwieństwie do innych maszyn wirtualnych Linuxa, które mam.

Poszukując rozwiązania, natknąłem się na py-vbox, który pozwala łatwo wysyłać zdarzenia klawiatury do konsoli za pomocą interfejsu API VirtualBox. Pozwala również na bezpośrednie sesje konsoli, ale nie działają tak, jak robi to VBoxManage.exe. Tak więc zakończyło się to wysłaniem mnóstwa poleceń na klawiaturze w celu skonfigurowania skryptu, który będzie montował dodatkowe woluminy. Czy istnieje lepszy sposób?

Dla każdego, kto może potrzebować, oto bardzo uproszczona wersja tego, co się dzieje. Pierwsze dwa bity to stare pliki .bat, które mają zastosowanie do każdego. Po pierwsze, aby stworzyć naszą 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 

Następnie doker VM musi być uruchomiony ...

"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 

Teraz uproszczoną wersję skryptu Pythona, aby napisać skrypt uproszczony do montowania VM za pomocą klawiatury przy użyciu pY-vbox:

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) 
+1

Zobacz, czy ten link pomoże Ci http://www.incrediblemolk.com/sharing-a-windows-folder-with-the-boot2docker-vm/. Komendą jest 'vboxmanage sharedfolder' –

+0

@warmoverflow Dziękuję, ale już wylogowałem się z tego. To rozwiązanie spowodowałoby usunięcie dostępu do c: \ users, a także nie działa na najnowszej wersji, przynajmniej nie na moim komputerze. –

+0

Dlaczego trzeba wykonywać te polecenia z maszyny wirtualnej? Jedyne co musisz zrobić w VM to zmodyfikować '/ var/lib/boot2docker/bootlocal.sh'. Natomiast dodawanie pliku dzielonego VBoxManage.exe jest wykonywane, gdy maszyna wirtualna jest już utworzona, ale jeszcze nie została uruchomiona. http://stackoverflow.com/a/35498478/6309 – VonC

Odpowiedz

0

jak omówiono w komentarzach:

Folderjest współdzielony z maszyną wirtualną przy użyciu funkcji sharedfolders w VirtualBox. Po prostu dodaj kolejny wspólny folder i gotowe. Jest to możliwe z linii poleceń poprzez VBoxManage sharedfolder add <uuid|vmname> --name <name> --hostpath <path> [--transient] [--readonly] [--automount]. Najprawdopodobniej musisz ponownie uruchomić maszynę wirtualną.

Inną opcją w nowszych wersjach systemu Windows jest po prostu zamontowanie dowolnego folderu w folderze C:\Users, np. C:\Users\myuser\dockerdata.

+0

Niestety dodanie folderów współdzielonych nie działa. Zobaczysz, że używanie vboxmanage jest częścią mojego rozwiązania, ale problem polega na tym, że udostępnienie tego mechanizmu jest dostępne dla maszyn wirtualnych działających wewnątrz. Również, instalując foldery w katalogu c: \ users \ wszędzie tam, gdzie jest to trudne, gdy musi być dostępny dla różnych użytkowników, oraz usługi, które mogą nie mieć folderu użytkownika itp. –

Powiązane problemy