2017-09-07 5 views
1

Dockerコンテナの起動と停止にJavaを使用するアプリケーションがあります。これを行う方法は、コマンドラインからテストするときにうまく動作するdocker-machine createを使用しているようです。Javaからdocker-machine createを使用してください。

、Javaからコモンズ-EXECを使用して実行している場合しかし、私はエラーを取得:

(aa4567c1-058f-46ae-9e97-56fb8b45211c) Creating SSH key...               
Error creating machine: Error in driver during machine creation: /usr/local/bin/VBoxManage modifyvm aa4567c1-058f-46ae-9e97-56fb8b45211c --firmware bios --bioslogofadein off --bioslogofadeout off --bioslogodisplaytime 0 --biosbootmenu disabled --ostype Linux26_64 --cpus 1 --memory 1024 --acpi on --ioapic on --rtcuseutc on --natdnshostresolver1 off --natdnsproxy1 on --cpuhotplug off --pae on --hpet on --hwvirtex on --nestedpaging on --largepages on --vtxvpid on --accelerate3d off --boot1 dvd failed:                    
VBoxManage: error: Could not find a registered machine with UUID {aa4567c1-058f-46ae-9e97-56fb8b45211c}    
VBoxManage: error: Details: code VBOX_E_OBJECT_NOT_FOUND (0x80bb0001), component VirtualBoxWrap, interface IVirtualBox, callee nsISupports                        
VBoxManage: error: Context: "FindMachine(Bstr(a->argv[0]).raw(), machine.asOutParam())" at line 500 of file VBoxManageModifyVM.cpp                          

私はマシンを起動するために使用していることをinitializationScriptの私VBOX_USER_HOME変数が設定されている:

export WORKERID=$1 
export VBOX_USER_HOME=/Users/me/Library/VirtualBox 

# create the machine 
docker-machine create $WORKERID && \   # create the worker using docker-machine 
eval $(docker-machine env $WORKERID) && \  # load the env of the newly created machine 
docker run -d myimage 

そして私はコモンズExecのCommandLineクラスを経由して、Javaからこれを実行しています:

CommandLine cmdline = new CommandLine("/bin/sh"); 
cmdline.addArgument(initializeWorkerScript.getAbsolutePath()); 
cmdline.addArgument("test"); 
Executor executor = new DefaultExecutor(); 

Javaからdocker-machineとインターフェースできる別のライブラリがあれば、それを使用したり、問題がある場合はCommons Execを変更しても構いません(理由はわかりませんが)。基本的な要件は、ドッカーマシンがJavaを使用してマシンを作成し、後でそのマシンを停止するためにドッカーマシンを使用できるようにする方法があることです。

答えて

0

私が掲載した例はうまくいくはずですが、私が持っていた問題は、マシンにUUID名をプロビジョニングしていたことです。その名前には、明らかにVBoxManageを破るダッシュ( - )文字が含まれていました。これは何らかのパスの問題のためかもしれませんが、私は推測しています。 UUIDにダッシュの代わりにドット(。)を付けるように変更したとき、ロードされてマシンが正常に起動しました。

モデレータが必要な場合はこの投稿を削除してもよろしいですが、docker-machine作成の名前付けに関する問題の解決方法を探している場合には、ここに残しておきます。

関連する問題