将Java webapp部署到Docker容器中运行的Tomcat 8
我是Tomcat和Docker的新手,所以我可能在这个问题中遗漏了Tomcat的基本原理 我想做的是构建一个Docker容器,它运行一个SpringBoot Restful web服务,只返回一些静态数据。这都是在OSX上运行的,所以我也使用Boot2Docker 我已经编写了自己的Dockerfile来构建我的应用程序在其中运行的容器:将Java webapp部署到Docker容器中运行的Tomcat 8,java,tomcat,docker,spring-boot,war,Java,Tomcat,Docker,Spring Boot,War,我是Tomcat和Docker的新手,所以我可能在这个问题中遗漏了Tomcat的基本原理 我想做的是构建一个Docker容器,它运行一个SpringBoot Restful web服务,只返回一些静态数据。这都是在OSX上运行的,所以我也使用Boot2Docker 我已经编写了自己的Dockerfile来构建我的应用程序在其中运行的容器: FROM tomcat:8.0.20-jre8 RUN mkdir /usr/local/tomcat/webapps/myapp COPY /1.0-S
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正在运行,我还可以点击所有示例,等等
对于这个问题,当我导航到我得到一个404。我不太明白为什么。我是否缺少有关.war部署到Tomcat的信息?您正在尝试将
war
文件复制到webapps
下面的目录中。war文件应复制到webapps
目录中
删除mkdir命令,并按如下方式复制war
文件:
COPY /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/myapp.war
如果启用了
autodeploy
,Tomcat将提取war。Tomcat将只提取复制到webapps
目录的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
这一条有一条直线 你可以直接跑
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目录,并立即让你的应用程序运行。你从哪里获得该IP地址?它是分配给我的Boot2Docker VM的IP地址。在没有/myapp的情况下点击该IP:port会显示默认的Tomcat页面。我是Linux用户,所以行为可能会有所不同,但请尝试访问localhost:8080。这不起作用,因为容器运行在Boot2Docker管理的VM中,这与在Linux上本机运行Docker有点不同。检查您Tomcat的日志,我不认为tomcat能够加载你的应用程序,因为你没有把战争放在
webapps
中,而是放在一个子文件夹中。选中此选项可能会有所帮助。这将替换tomcat目录中的任何现有Web应用程序,并只复制一个war?如果不需要这样做,您可能必须使用暂存区域并将WAR从那里复制到tomcat/WebApps。只有当autodeploy设置为true时,此功能才有效。我们如何在命令行中部署它?