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

我对Tomcat和Docker来说很新奇 – 所以我可能在这个问题上丢失了一个Tomcat基础。

我想要做的是build立一个Docker容器,运行一个SpringBoot Restful Web服务,它只是返回一些静态数据。 这是所有在OSX上运行,所以我也使用Boot2Docker。

我写了自己的Dockerfile来构build我的应用程序运行的容器:

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工作正常,我能够从创build的图像启动容器。

 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中描述的path。 此外,我可以导航到Tomcat的默认页面,以确认Tomcat正在运行,我也可以打所有的例子,等等。

对于这个问题,当我导航到http://192.168.59.103:8888/myapp/getData时,我得到了404。我无法弄清楚为什么。 我错过了一个.war部署到Tomcat的东西?

您尝试将war复制到webapps下面的subdir,这是错误的。 战争文件应该简单地复制到webapps文件夹。

删除mkdir命令,并replace这样的副本:

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

雄猫将提取战争。

Tomcat只会将复制到webapp目录的war提取出来。 改变DockerFile如下

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

除非您指定了webroot,否则您可能需要访问以下url

http://192.168.59.103:8888/myapp/getData

有一个这个的oneliner。

你可以简单地运行,

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

这将复制战争文件到webapps目录,让您的应用程序运行在任何时候。

Interesting Posts