2016-07-19 22 views
0

我在構建Docker鏡像以運行基於Spring Boot的應用程序。我希望讓用戶能夠通過將包含application.properties的文件夾掛載到容器中來提供運行時屬性文件。這裏是我的Dockerfile,碼頭安裝發生在執行入口點之前或之後

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包含application.properties我想在運行時jar文件回暖。

然而,這並不起作用,應用程序運行並沒有拿起這個掛載的屬性文件,而是使用裝在jar中的默認文件。但是,當我將exec放入啓動容器並再次手動運行入口點cmd時,它會按照預期方式運行我裝入的文件。所以我想知道這是與mount如何與入口點一起工作的相關內容?或者我只是沒有正確地爲這種情況編寫Dockerfile?

+0

當您手動運行它時,您從哪個目錄運行它? '/'還是'/ app'? – Roman

+0

不好意思回答得太早。我想你的意思是我在'exec'之後運行到容器中的哪個位置?我在'/ app'下運行它,所以我手動運行的cmd只是'java -jar myapp.jar' – Derek

+0

哦,只是簡單地嘗試在其他地方運行cmd,然後它不使用配置中的掛載。所以我想這個問題是我沒有完全理解Spring Boot如何選擇外部配置。 – Derek

回答

1

春季啓動searchesapplication.properties一個/config子目錄當前目錄(其它位置之間)內。在你的情況下,當前目錄是/(碼頭默認),所以你需要將其更改爲/app。要做到這一點,請添加

WORKDIR /app 

之前的ENTRYPOINT行。


並回答您的原始問題:掛載在容器內的任何內容運行之前完成。

+0

是的,只是做到了這一點,它的工作原理。應該仔細閱讀文檔頁面。非常感謝您的快速幫助! – Derek

相關問題