2016-03-05 9 views
8

でドッカー画像内の\ユーザー。自動的にマウントホストフォルダ:私は&が<strong>最小限のユーザー入力</strong>でWindows上でいくつかのドッカーコンテナを管理</strong>をインストールし、自動的に<strong>する必要があるプログラムを持っているWindowsの

自動的にの設定任意のWindowsフォルダをマウントするドッカー。これは、クリーンインストールから行う必要があります。ここでは、Docker VMは作成済みであると想定できません。

DockerはデフォルトでC:\ UsersのほぼすべてのフォルダをBoot2Dockerイメージにマウントすることができ、Dockerイメージ自体にマウントすることができます。

私は他のフォルダを使うことができるように、しかし "VBoxManage.exe run"、copytoなどのコマンドはBoot2Docker上では動作しないように、VM外部からデフォルトのマウントスクリプトを自動的に変更したい私が持っている他のLinux VMとは異なります。

解決策を探すにあたって、私はpy-vb​​oxを見つけました。これにより、VirtualBox APIを使用して簡単にキーボードイベントをコンソールに送信できます。直接コンソールセッションも可能ですが、VBoxManage.exeのように失敗します。だから、これは私がセットアップするために余分なボリュームをマウントするスクリプトをキーボードの上に

echo command >> /c/script.sh 

多くのコマンドを送信することで終わりました。より良い方法がありますか?

これが必要な人にとって、ここでは非常に単純化されたバージョンがあります。最初の2ビットは古い.batファイルなので、誰にでも適用されます。簡略化されたマウントスクリプトを書くために、今、Pythonスクリプトの簡易版を

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 

その後、ドッキングウィンドウ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 

:まず、私たちのドッキングウィンドウVMを作成しますVMは、キーボードを介して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

@warmoverflowありがとうございますが、私はすでにこれを知っています。このソリューションはc:\ usersへのアクセスを削除し、少なくとも私のマシン上では最新バージョンでは動作しないようです。 –

+0

なぜこれらのコマンドをVMから実行する必要がありますか? VMで行う必要があるのは、 '/ var/lib/boot2docker/bootlocal.sh'を変更することだけです。そして、 'VBoxManage.exe sharedfolder add'は、VMが作成されたがまだ開始されていないときに行われます。 http://stackoverflow.com/a/35498478/6309 – VonC

答えて

0

C:\Usersフォルダは、VirtualBoxの共有フォルダ機能を使用してVMと共有されます。別の共有フォルダを追加するだけで完了です。これはコマンドラインからVBoxManage sharedfolder add <uuid|vmname> --name <name> --hostpath <path> [--transient] [--readonly] [--automount]経由で可能です。後でVMを再起動する必要があります。

新しいWindowsバージョンの別のオプションは、C:\Usersフォルダ内の任意のフォルダをマウントするだけです。 C:\Users\myuser\dockerdata

+0

残念ながら、共有フォルダの追加は機能しません。 vboxmanageを使用するのは私の解決策の一部ですが、内部で実行されているVMがそのマウントを利用できるようにすることが問題です。 また、別のユーザーがアクセスする必要がある場合はどこにでもc:\ users \にフォルダをマウントするのが難しく、ユーザーのフォルダーなどを持たないサービスもあります。 –

関連する問題