Используйте docker-машину создания из Java

2

У меня есть приложение, которое (я хочу) использует Java для запуска и остановки контейнеров Docker. Похоже, что способ сделать это - использовать файл docker-machine create, который отлично работает, когда я тестирую из командной строки.

Однако при запуске с использованием Commons-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                                                                                                      

Я установил свою переменную VBOX_USER_HOME в 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, я рад ее использовать или изменить Commons Exec, если это проблема (хотя я не понимаю почему). Основным требованием является то, что у меня есть способ получить докер-машину для создания машины с использованием Java, а затем позже, чтобы использовать докер-машину для остановки этой машины.

Теги:
apache-commons-exec
docker-machine

1 ответ

0

Как оказалось, пример, который я опубликовал, должен работать, проблема, с которой я столкнулась, заключается в том, что я предоставлял машинам имя UUID. Это имя содержит символы тире (-), которые, по-видимому, нарушают VBoxManage. Это может быть из-за какой-то проблемы пути, но я просто размышляю. Когда я изменил свой UUID, чтобы точка (.) Вместо тире загрузилась и запустила машину просто отлично.

Я рад удалить этот пост, если модераторы хотят, но оставят его здесь, в случае, если люди ищут решения проблем с проблемами создания именования докеров.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню