2016-03-05 5 views
8

में \ डोकर छवियों में उपयोगकर्ता मैं एक प्रोग्राम है जो करने की जरूरत है स्वचालित रूप से & न्यूनतम उपयोगकर्ता इनपुट के साथ Windows पर कुछ डोकर कंटेनरों का प्रबंधन स्थापित मिल गया है।स्वचालित रूप से बढ़ते मेजबान सी के अलावा अन्य फ़ोल्डरों: विंडोज

इसे स्वचालित रूप से सेटअप डॉकर को मनमाने ढंग से विंडोज फ़ोल्डरों को माउंट करने की आवश्यकता है। इसे से पर स्थापित करने की आवश्यकता है, जहां डॉकर वीएम को नहीं बनाया जा सकता है।

डिफ़ॉल्ट रूप से डॉकर सी: \ उपयोगकर्ताओं में लगभग किसी भी फ़ोल्डर को बूट 2 डॉकर छवि में घुमाने के लिए अनुमति देगा, जो बदले में उन्हें डॉकर छवियों में घुमाने के लिए उपलब्ध कराता है।

मैं वीएम के बाहर से डिफ़ॉल्ट माउंट स्क्रिप्ट को स्वचालित रूप से संशोधित करने का एक तरीका चाहता हूं ताकि मैं अन्य फ़ोल्डरों का उपयोग कर सकूं, लेकिन "VBoxManage.exe run", copyto, आदि आदेश किसी भी में Boot2Docker पर काम नहीं करते हैं मेरे पास अन्य लिनक्स वीएम के विपरीत है।

तो, समाधान के लिए मेरी खोज में, मैंने पीई-वीबॉक्स पर ठोकर खाई, जिससे आप आसानी से वर्चुअलबॉक्स एपीआई का उपयोग कर कंसोल पर कीबोर्ड ईवेंट भेज सकते हैं। यह प्रत्यक्ष कंसोल सत्रों की भी अनुमति देता है, लेकिन वे VBoxManage.exe की तरह विफल हो जाते हैं। तो, यह मुझे क्रम में सेटअप करने के लिए एक स्क्रिप्ट है कि अतिरिक्त मात्रा माउंट होगा कीबोर्ड पर

echo command >> /c/script.sh 

आदेशों के बहुत सारे भेजने के साथ समाप्त हो गया। क्या कोई बेहतर तरीका है?

किसी को भी जिसकी आवश्यकता हो सकती है, यहां पर एक बहुत ही सरल संस्करण है जो चल रहा है। पहले दो बिट पुराने हैं। बैट फाइलें, ताकि वे किसी के लिए आवेदन करें।

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 

फिर, डोकर वीएम आरंभ किया जाना चाहिए ...

"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:

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

देखें कि यह लिंक आपको http://www.incrediblemolk.com/sharing-a-windows-folder-with-the-boot2docker-vm/ में सहायता करता है या नहीं। आदेश 'vboxmanage sharedfolder' –

+0

@ वार्मोवरफ्लो धन्यवाद, लेकिन मैंने पहले ही इस से बिल्ली को गुमराह किया है। यह समाधान सी: \ उपयोगकर्ताओं तक पहुंच को हटा देगा, और कम से कम मेरी मशीन पर नहीं, नवीनतम संस्करण पर काम नहीं कर रहा है। –

+0

आपको उन आदेशों को वीएम से निष्पादित करने की आवश्यकता क्यों है? वीएम में आपको केवल एक चीज करने की ज़रूरत है '/ var/lib/boot2docker/bootlocal.sh' को संशोधित करना। और 'VBoxManage.exe sharedfolder add' किया जाता है जब VM बनाया जाता है लेकिन अभी तक शुरू नहीं हुआ है। http://stackoverflow.com/a/35498478/6309 – VonC

उत्तर

0

के रूप में टिप्पणी में चर्चा की:

C:\Users फ़ोल्डर वर्चुअलबॉक्स की साझा फ़ोल्डर्स सुविधा का उपयोग कर वीएम के साथ साझा किया जाता है। बस एक और साझा फ़ोल्डर जोड़ें और आप कर रहे हैं। यह कमांडलाइन से VBoxManage sharedfolder add <uuid|vmname> --name <name> --hostpath <path> [--transient] [--readonly] [--automount] के माध्यम से संभव है। आपको बाद में वीएम को फिर से शुरू करने की आवश्यकता है।

नए विंडोज संस्करणों में एक और विकल्प यह है कि आप कहीं भी C:\Users फ़ोल्डर के अंदर जो भी फ़ोल्डर चाहते हैं उसे माउंट करना है, उदा। C:\Users\myuser\dockerdata

+0

दुर्भाग्यवश, साझा फ़ोल्डर्स जोड़ना काम नहीं करता है। आप vboxmanage का उपयोग करके देखेंगे मेरे समाधान का हिस्सा है, लेकिन उस माउंट को वीएम के अंदर चलने के लिए उपलब्ध करना समस्या है। साथ ही, फ़ोल्डर्स को c: \ users \ में कहीं भी बढ़ाना मुश्किल है जब इसे विभिन्न उपयोगकर्ताओं द्वारा एक्सेस किया जाना आवश्यक है, और ऐसी सेवाएं जिनमें उपयोगकर्ता फ़ोल्डर नहीं हो सकता है आदि। –

संबंधित मुद्दे