将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
有一个这个的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目录,让您的应用程序运行在任何时候。