2016-10-04 5 views
0

항아리를 docker에 배포해야합니다. 실행중인 jar에 대해 Dockerfile을 작성하는 방법을 알고 있습니다. 이 jar는 명령 줄 옵션입니다. application.it에는 서버 인수가 있으며, 다른 인수로 serveral 시간을 실행하는 데 필요합니다. 예 : 에는 arg1, arg2가 있습니다.docker에서 실행 가능 jar를 실행하는 방법

사용자는 arg1 = A, arg2 = B로 실행하고 은 arg1 = A2.No arg2로 실행할 수 있습니다.

도커가 실행할 수 없으며 실행할 때이 인수를 지정했습니다. jar 기본 태스크가 완료되면 컨테이너가 중지됩니다. 다른 컨테이너를 시작하여 jar를 실행해야합니다.

는 고정 표시기와 deloy에 적합하지 않습니다,이 friendly.my 문제는이 경우

입니다 생각하지 않아?

+0

컨테이너에서 어떻게 실행을 시도 했습니까? – n2o

+0

도커 실행 인수를 정의하고 컨테이너 실행에 전달하십시오. –

+0

컨테이너를 실행할 때 인수를 전달할 수 있다고 생각합니다. 이렇게 :'docker run image -a -b -c'. 여기를 참조하십시오 : http://stackoverflow.com/a/31523657/4151472 – RichArt

답변

1

컨테이너를 계속 실행하기 위해 끝나지 않을 스크립트를 실행하도록 컨테이너를 구성 할 수 있습니다.

RUN echo 'sleep infinity' >> /bootstrap.sh && chmod +x /bootstrap.sh 

당신은 다음과 같은 방법으로 컨테이너를 시작할 수 있습니다 :

docker run -d --name <container-name> <image> ./bootstrap.sh 

를 사용할 수있는 항아리 실행하려면 :

docker exec <container-name> java [arguments] 
당신이 (가) Dockerfile에 다음을 포함 할 수 있습니다 예를 들어

마음에 그것은 자바 프로그램이고 그것은 당신이 컨테이너 내부에서 실행에 큰 이익을 가지고 있지만 가능합니다 OS 불가 지입니다.

+0

실제로 컨테이너에서 실행하는 데 어떤 이점도 기대하지 않습니다 .Docker에 배치해야합니다. 컨테이너에서 스크립트를 실행하는 방법을 명확히 할 수 있습니다. 죄송합니다. 요점을 얻지 못했습니다. 컨테이너 수명주기가 병에 묶여 있다고 생각했습니다. 주요 과제. –

+0

컨테이너가 pid 1로 프로세스에 의해 구동됩니다. 프로세스가 실행중인 경우 컨테이너도 실행됩니다. 프로세스가 끝나면 컨테이너가 멈 춥니 다. java 명령을 실행하면 이러한 현상이 발생합니다. 무한 루프가 포함 된 스크립트를 pid 1로 실행하면 컨테이너가 멈추지 않습니다. [link] (http://stackoverflow.com/questions/39818938/how-to-keep-an-infinite-loop-running-in-order-to-not-close-a-container-in-docker)를 확인하십시오. 이렇게하면 "docker exec"를 사용하여 실행중인 컨테이너에서 명령을 실행할 수 있습니다. – Mgccon

0

이 목적으로 간단한 "해킹"을 사용할 수 있습니다 ...하지만 이것이 최선의 해결책이라고 생각하지 않습니다.

곧 끝나지 않을 프로세스로 컨테이너를 시작하십시오. bash. 또한 최신 우분투 이미지를 사용하고 싶다고 가정 해 봅시다.

$ docker run -d -it ubuntu bash 

이는 우분투 컨테이너를 시작하고 데몬 편집 등 실행 유지 : 배경에서 분리 ( -d을) 그런 다음에 컨테이너를 시작할 수 있습니다. 그것은 을 jolly_hawking있다

$ docker ps -a 
CONTAINER ID IMAGE COMMAND CREATED   STATUS   NAMES 
59104211e795 ubuntu "bash" 2 seconds ago Up 1 seconds jolly_hawking 

:

는 컨테이너의 이름을 조회 할 수 있습니다. 귀하의 명령 (여기 : ls /는) :

$ docker exec jolly_hawking ls/

을하지만 그것은 확실히 가장 좋은 해결책은 아니다 다음이 명령을 사용하여 컨테이너에 보낼 수 있습니다. 어쩌면이 방법을 Docker 컨테이너가 작동하는 방법과 어떻게 작동하는지 예제로 생각해보십시오.

+0

이것은 내가 제안한 것과 비슷하지만 배시 시간이 초과되면 컨테이너가 멈추게됩니다. run 명령의 -d 옵션은 실제로 컨테이너를 "분리 (detached)"한다는 의미로, 일단 쉘을 닫으면 중지되지 않습니다. – Mgccon

+0

예, 동일하지만 예제를 뒷받침합니다. – n2o

관련 문제