2017-02-05 16 views
1

부두 벽화 플러그인 "run-forked" goal을 사용하여 도킹해야하는 애플리케이션이 있습니다. 어떤 일이 일어나면 maven이 시작됩니다. 컨테이너는 약 10 초 동안 만 존재하고 자식이 JVM 프로세스를 포크 한 후에 maven이 종료되면 죽습니다.mvn 부두 : 도커 컨테이너 안에서 실행 포크가 있습니까?

많은 옵션을 조사했습니다. 이 받는다는가 Docker waits for a SIGTERM 때문에, 이미지가 구축되지 않는 실행 유지하지만,

ENTRYPOINT [ "/entrypoint.sh" ] 
CMD [ "jetty:run-forked > /tmp/log 2>&1" ] 

그러나 : 나는 일 거라고 생각 하나의 옵션은 true로 "waitForChild"을 설정하는 것입니다 다음 같은 것을 할.

왜 내가 jetty : run-forked를 사용해야하는지 궁금하다면 코드에 static linked library that needs a JVM이 필요하기 때문입니다.

나는이 불가능 보이기 때문에, 수건을 던질 준비가

...

답변

1

나는 당신의 자바가 설정에 대해 완전히 확실하지 않다,하지만 작동하는 깔끔한 트릭이 같은 것입니다 :

다음

COPY myscript.sh /bin/myscript.sh # Remember to make this executable! 

을 반영하기 위해 엔트리 포인트를 편집 : 당신의 dockerfile에서

,과 같이 사용자 정의 스크립트를 추가

ENTRYPOINT ["/bin/myscript.sh"] 
을 더 이상 용기 내에서 PID 1이기 때문에, 당신의 부두/MVN 물건을 다른 프로세스를 생성하고 종료 후에도 계속 실행이 컨테이너를 보장합니다

#!/bin/bash 

# Run Java/mvn commands here 
... 
jetty:run-forked > /tmp/log 2>&1 

# Throw in a shell command that simply executes forever 
tail -f /dev/null 

: 16,

귀하의 myscript.sh이 같은 작은 선물을 볼 수 없었다 쉘 스크립트는 myscript.sh입니다. 이 쉘 스크립트는 tail -f 때문에 영원히 계속 실행됩니다.

+0

작동합니다! 고맙습니다. 확실히 깔끔한 트릭, 그리고 그 이상, 그것은 분명하고 간단합니다. –