我有一个(我想)使用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 我在用来启动机器的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中通过Commons Exec CommandLine类执行以下代码:
CommandLine cmdline = new CommandLine("/bin/sh");
cmdline.addArgument(initializeWorkerScript.getAbsolutePath());
cmdline.addArgument("test");
Executor executor = new DefaultExecutor();如果有另一个库可以与Java中的docker-machine接口,我很乐意使用它,或者如果这是问题所在的话,可以将Commons Exec替换掉(尽管我不知道为什么)。基本要求是,我有一些方法可以让docker-machine使用Java创建一台机器,然后能够使用docker-machine停止该机器。
发布于 2017-09-08 23:36:12
事实证明,我发布的示例应该是有效的,我遇到的问题是我为机器提供了一个UUID名称。该名称包含破折号(-)字符,这显然会破坏VBoxManage。这可能是因为某种路径问题,但我只是在猜测。当我将我的UUID更改为点(.)它加载并启动机器,而不是dash。
如果版主愿意,我很乐意删除这篇文章,但我会把它留在这里,以防人们正在寻找对接机创建命名问题的解决方案。
https://stackoverflow.com/questions/46106229
复制相似问题