使用docker机器从java创建

使用docker机器从java创建,java,bash,docker-machine,apache-commons-exec,Java,Bash,Docker Machine,Apache Commons Exec,我有一个(我想)使用Java启动和停止Docker容器的应用程序。这样做的方法似乎是使用docker machine create,当我从命令行进行测试时,它工作得很好 但是,当从Java使用Commons Exec运行时,我会遇到以下错误: (aa4567c1-058f-46ae-9e97-56fb8b45211c) Creating SSH key... Error creat

我有一个(我想)使用Java启动和停止Docker容器的应用程序。这样做的方法似乎是使用docker machine create,当我从命令行进行测试时,它工作得很好

但是,当从Java使用Commons 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                                                                                                      
我已在用于启动机器的初始化脚本中设置了我的
VBOX\u USER\u HOME
变量:

export WORKERID=$1
导出VBOX\u USER\u HOME=/Users/me/Library/VirtualBox
#创建机器
docker machine创建$WORKERID&\#使用docker machine创建工人
eval$(docker machine env$WORKERID)&&&\\加载新创建机器的env
docker run-d myimage
我通过Commons Exec
CommandLine
类从Java执行这个命令:

CommandLine cmdline=新命令行(“/bin/sh”);
addArgument(initializeWorkerScript.getAbsolutePath());
cmdline.addArgument(“测试”);
Executor Executor=新的DefaultExecutor();

如果有另一个库可以从Java与docker机器接口,我很乐意使用它,或者如果这是问题的话(尽管我不明白为什么)。基本要求是,我有一些方法让docker machine使用Java创建一台机器,然后稍后能够使用docker machine停止该机器。

正如我发布的示例所证明的那样,我遇到的问题是,我正在使用UUID名称配置机器。该名称包含破折号(-)字符,显然会打断VBoxManage。这可能是因为某种路径问题,但我只是猜测。当我将UUID改为点(.)而不是破折号时,它被加载并启动了机器

如果版主愿意,我很乐意删除这篇文章,但我会把它留在这里,以防人们正在寻找解决docker机器命名问题的方法