2017-09-07 2 views
1

Docker 컨테이너를 시작하고 중지하는 데 Java를 사용하는 응용 프로그램이 있습니다. 이 작업을 수행하는 방법은 docker-machine create를 사용하는 것입니다.이 명령은 명령 줄에서 테스트 할 때 잘 작동합니다.docker-machine을 Java에서 사용하십시오.

자바에서 가공-Exec에서 사용하여 실행할 때

는 그러나, 나는 오류 얻을 :

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 
: 나는 기계를 시작하는 데 사용하고 initializationScript 내 VBOX_USER_HOME 변수를 설정 한

(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                          

그리고 하원 Exec을 CommandLine 클래스를 통해 자바에서 이것을 실행 해요 :

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

자바에서 도커 - 머신과 인터페이스 할 수있는 또 다른 라이브러리가 있다면, 그걸 사용하고, 문제가된다면 Commons Exec을 바꾸어 드리겠습니다 (왜 그런지는 모르겠지만). 기본 요구 사항은 도커 - 기계가 Java를 사용하여 기계를 작성한 다음 나중에 도커 - 기계를 사용하여 해당 기계를 중지시킬 수있는 방법을 얻는 것입니다.

답변

0

제가 게시 한 예제가 효과가 있다는 것을 알게되었으므로, 제가 가지고 있었던 문제는 UUID 이름으로 컴퓨터를 프로비저닝하고 있다는 것입니다. 이 이름에는 VBoxManage를 깨뜨린 대시 (-) 문자가 포함되어 있습니다. 이것은 어떤 종류의 경로 문제 때문에 있을지도 모르지만 나는 다만 추측이다. 내 UUID를 대시 대신 도트 (.)로 변경하면로드가 시작되어 시스템이 올바르게 시작되었습니다.

운영자가 원하는 경우이 게시물을 삭제해도 좋지만 사람들이 docker-machine 작성 이름 문제에 대한 해결책을 찾고있는 경우 여기에 남겨 둘 것입니다.