将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理界面截图
示例中的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的可部署应用程序。 为了使其可展开,您可以:
- 重新定义
Application
从Spring框架Web支持来扩展SpringBootServletInitializer
; 然后 -
覆盖
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 /
参考
- Spring Boot War部署到Tomcat
- Spring Boot参考指南:创build一个可部署的war文件