将Spring WAR部署到基于Tomcat的docker

Koa*_*ung 7 java spring tomcat maven docker

我已经按照Spring的构建RESTful Web服务教程并创建了一个虚拟webapp(带有"Build with Maven"指令).我构建并打包WAR.然后我用这个命令运行它:

java -jar ./target/Dummy-1.0-SNAPSHOT.war
Run Code Online (Sandbox Code Playgroud)

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

现在我想用Docker封装应用程序,这样我就可以进一步测试它而无需将Tomcat安装到系统空间.这是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"]
Run Code Online (Sandbox Code Playgroud)

我构建并运行docker绑定到http:// localhost:8080.我可以在" http:// localhost:8080 " 上看到Tomcat欢迎页面.但我也看不到我的应用程序:

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

更新1:Tomcat管理界面截图

Tomcat管理员

Koa*_*ung 3

示例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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  1. 重新定义Application以扩展SpringBootServletInitializerSpring框架的Web支持;然后
  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);
        }
    
    }
    
    Run Code Online (Sandbox Code Playgroud)

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

重建 dockerfile 并使用正确的端口绑定运行它后,可以通过以下方式使用greeting示例端点:http://localhost:8080/app/greeting/

参考

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