2017-12-18 116 views
0

我有一個docker容器 - Tomcat應用程序(war文件),它的靜態內容包含在war文件中。但是爲了開發目的,我想將靜態內容移出war文件並將其映射到文件系統上的文件夾。這樣做的原因很簡單。例如,我不希望每次改變javascript文件時重新部署。我想在瀏覽器中重新加載頁面,並將所做的更改提取出來。 Tomcat的版本是8如何在Tomcat上以root身份部署戰爭之外的靜態內容8

最常見的解決了這個問題(如果你google一下)是改變server.xml文件和類似的片段添加到此之一:

<Context docBase="/my/static/content/folder" path="/some/context" /> 

不過,我想將靜態內容映射到我的應用程序的根文件夾。說我的戰爭文件名是myapp.war。它被部署在「/ myapp」下。問題是,如果我想添加靜態內容從根開始,然後我的上下文片段看起來是這樣的:

<Context docBase="/my/static/content/folder" path="/myapp" /> 

這是不正確,因爲該路徑必須是唯一的,「MYAPP」不能既使用 - 自動部署使用war文件名來派生上下文以及上面的上下文片段。我可以改變路徑來指向「myapp/static」,但是我需要將更改應用到我想要避免的源代碼。

想法如何將外部文件夾映射到我的應用程序根目錄是非常值得歡迎的。

+0

你爲什麼不用另一個碼頭圖像創建一個例如nginx httpd,提供來自該映像的開發靜態內容並將nginx配置爲您的tomcat docker映像的反向代理? – saw303

+0

目前我寧願保持設置儘可能簡單。我也可以使用Apache Web服務器來提供靜態內容,但我暫時不想再引入其他服務器。感謝提示。 – Flexer

回答

0

,並回答我的問題...... 背景標籤應該是這樣的:

該解決方案的
<Context path="/myapp" docBase="myapp.war"> 
    <Resources className="org.apache.catalina.webresources.StandardRoot"> 
     <PreResources className="org.apache.catalina.webresources.DirResourceSet" 
      base="/my/static/content/folder" 
      webAppMount="/"> 
     </PreResources> 
    </Resources> 
</Context> 

一個令人不快的副作用是,雖然我的服務器的啓動時間從上升〜22秒〜52秒。 我的「/我的/靜態/內容/文件夾」有97個項目,其大小爲13.7MB。

反饋如何改善這種情況,或者歡迎使用沒有如此大的啓動時間的替代解決方案。

更新: 從PreResources切換到PostResources解決了啓動問題。它從〜52秒回到〜26秒。現在開銷只有4秒,這對我來說已經足夠了。

更新2:在我原來的文章中,我提到Context標籤應該添加到server.xml。這可以工作,但更好和更簡潔的方式來添加它是通過創建一個context.xml文件並將它放在WAR文件中的META-INF下。這樣,只有WAR文件和服務器(分別是Docker鏡像)的更改是相同的,無論是否用於開發。