2017-09-07 28 views
1

我有一個應用程序(我想)使用Java來啓動和停止Docker容器。看來這樣做的方式是使用docker-machine create,當我從命令行測試時,它可以正常工作。使用docker-machine從java創建

但是,使用共享-Exec的從Java運行時,我得到的錯誤:

(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 

而且我從Java通過下議院Exec的CommandLine類執行此:

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創建命名問題的解決方案,請將其留在這裏。