2017-12-18 180 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镜像)的更改是相同的,无论是否用于开发。