将Java webapp部署到在Docker容器中运行的Tomcat 8

时间:2015-03-22 23:45:20

标签: java tomcat docker spring-boot war

我对Tomcat和Docker很陌生 - 所以我可能在这个问题的某个地方错过了一个Tomcat基础。

我要做的是构建一个运行SpringBoot Restful Web服务的Docker容器,该服务只返回一些静态数据。这一切都在OSX上运行,所以我也在使用Boot2Docker。

我已经编写了自己的Dockerfile来构建我的应用运行的容器:

FROM tomcat:8.0.20-jre8

RUN mkdir /usr/local/tomcat/webapps/myapp

COPY /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/myapp/

这个Dockerfile工作正常,我可以从创建的图像启动容器。

docker build -t myapp .

docker run -it --rm -p 8888:8080 myapp

此容器正确启动并且不输出任何错误,并显示消息说我的应用已部署。

22-Mar-2015 23:07:21.217 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 
Deploying web application directory /usr/local/tomcat/webapps/myapp

容器也正确地将myapp.war复制到Dockerfile中描述的路径。此外,我能够导航到Tomcat默认页面以确认Tomcat正在运行,我还可以点击所有示例等。

对于这个问题,当我导航到http://192.168.59.103:8888/myapp/getData时,我得到了404.我无法弄明白为什么。我错过了关于.war部署到Tomcat的内容吗?

4 个答案:

答案 0 :(得分:62)

您正在尝试将war文件复制到webapps下面的目录中。 war文件应该复制到webapps目录。

删除mkdir命令,然后像这样复制war文件:

COPY /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/myapp.war

如果autodeploy已开启,Tomcat将解除战争。

答案 1 :(得分:17)

这是一个oneliner。

你可以简单地跑,

docker run -v /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war:/usr/local/tomcat/webapps/myapp.war -it -p 8080:8080 tomcat

这会将war文件复制到webapps目录,并立即让你的应用程序运行。

答案 2 :(得分:7)

Tomcat只会提取复制到webapps目录的战争。 如下所示更改Dockerfile

FROM tomcat:8.0.20-jre8
COPY /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/myapp.war

除非您指定了webroot

,否则您可能需要访问以下网址

http://192.168.59.103:8888/myapp/getData

答案 3 :(得分:0)

您可以尝试以下示例:

FROM tomcat:9.0.11-jre10

MAINTAINER saravit

RUN rm -rf /usr/local/tomcat/webapps/*

COPY ./ROOT.war /usr/local/tomcat/webapps/ROOT.war

CMD ["catalina.sh","run"]