2016-07-19 3 views
0

Spring Boot 기반 응용 프로그램을 실행하기 위해 Docker 이미지를 작성합니다. 사용자에게 application.properties가 들어있는 폴더를 컨테이너에 마운트하여 런타임 속성 파일을 제공 할 수있게하려고합니다. 여기 내 Dockerfile는진입 점 실행 전후에 Docker 마운트가 발생합니다.

FROM java:8 

RUN mkdir /app 
RUN mkdir /app/config 
ADD myapp.jar /app/ 

ENTRYPOINT ["java","-jar","/app/myapp.jar"] 

컨테이너를 발로, 나는이 실행됩니다

docker run -d -v /home/user/config:/app/config myapp:latest 

/home/user/config 내가 jar 파일이 실행 시간에 픽업 할 application.properties을 포함

.

그러나 이것은 작동하지 않으며, 실행 된 응용 프로그램은이 마운트 된 특성 파일을 선택하지 않습니다.이 파일은 jar 파일에 압축 된 기본 파일을 사용합니다. 하지만 시작 컨테이너에 exec을 입력하고 수동으로 진입 점 cmd를 다시 실행하면 예상대로 마운트 된 파일을 선택하여 작동합니다. 그래서이 마운트가 엔트리 포인트와 함께 작동하는 방식과 관련이 있는지 궁금합니다. 아니면이 경우 Dockerfile을 올바르게 작성하지 않았습니까? (다른 위치들) 현재 디렉토리/config 하위 디렉토리 내부 application.properties에 대한

+0

수동으로 실행하면 어떤 디렉토리에서 실행합니까? '/'또는'/ app'? – Roman

+0

죄송합니다. 일찌감치 대답하셨습니다. 'exec '다음에 어디서 컨테이너에 넣을 수 있니? 나는/app'에서 실행하기 때문에, 수동으로 실행 한 cmd는 단지'java -jar myapp.jar'이었습니다. – Derek

+0

아, 그냥 다른 곳에서 cmd를 실행 해보라고했습니다. 그런 다음 config에 마운트 된 것을 사용하지 않고 있습니다. 그래서 문제는 스프링 부트가 외부 설정을 선택하는 방법을 완전히 이해하지 못했다고 생각합니다. – Derek

답변

1

봄 부팅 searches. 귀하의 경우 현재 디렉토리는 / (도커 기본값)이기 때문에 /app으로 변경해야합니다. 이를 수행하려면 ENTRYPOINT 줄 앞에

WORKDIR /app 

을 추가하십시오.


그리고 원래 질문에 대답하십시오. 컨테이너 내부의 모든 항목이 실행되기 전에 마운트가 완료되었습니다.

+0

그래, 그냥 해냈어. 문서 페이지를 좀 더주의 깊게 읽어야합니다. 빠른 도움에 감사드립니다. – Derek