将Spring WAR部署到基于Tomcat的docker

我已经通过Spring 构build了一个REST风格的Web服务教程,并创build了一个虚拟web应用程序(带有“使用Maven构build”的说明)。 我构build并打包了WAR。 然后我用这个命令运行它:

java -jar ./target/Dummy-1.0-SNAPSHOT.war 

我可以在http:// localhost:8080 / greeting /上看到虚拟的JSON端点。

现在我想用Docker容器化应用程序,这样我就可以进一步testing它,而无需将Tomcat安装到系统空间。 这是我创build的Dockerfile

 FROM tomcat:7-jre8-alpine # copy the WAR bundle to tomcat COPY /target/Dummy-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/app.war # command to run CMD ["catalina.sh", "run"] 

我构build并运行docker绑定到http:// localhost:8080 。 我可以看到“ http:// localhost:8080 ”上的Tomcat欢迎页面。 但是我也看不到我的应用程序:

  • HTTP://本地主机:8080 /应用/
  • HTTP://本地主机:8080 /应用/问候/
  • HTTP://本地主机:8080 /问候/

我应该如何追踪这个问题? 可能是什么问题呢?

更新1:Tomcatpipe理界面截图

Tomcat管理员

示例中的Application.java文件如下所示:

 package hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 

这是一个有效的SpringBoot应用程序,但不是Tomcat的可部署应用程序。 为了使其可展开,您可以:

  1. 重新定义Application从Spring框架Web支持来扩展SpringBootServletInitializer ; 然后
  2. 覆盖configure方法:

     package hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.support.SpringBootServletInitializer; @SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 

无需更改pom.xml文件(或任何其他configuration)。

在重新构builddockerfile并运行正确的端口绑定之后,问候示例端点将通过以下方式可用: http:// localhost:8080 / app / greeting /

参考

  1. Spring Boot War部署到Tomcat
  2. Spring Boot参考指南:创build一个可部署的war文件