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
에 대한
수동으로 실행하면 어떤 디렉토리에서 실행합니까? '/'또는'/ app'? – Roman
죄송합니다. 일찌감치 대답하셨습니다. 'exec '다음에 어디서 컨테이너에 넣을 수 있니? 나는/app'에서 실행하기 때문에, 수동으로 실행 한 cmd는 단지'java -jar myapp.jar'이었습니다. – Derek
아, 그냥 다른 곳에서 cmd를 실행 해보라고했습니다. 그런 다음 config에 마운트 된 것을 사용하지 않고 있습니다. 그래서 문제는 스프링 부트가 외부 설정을 선택하는 방법을 완전히 이해하지 못했다고 생각합니다. – Derek