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

2022-08-31 15:23:46

我对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-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 的内容?


答案 1

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

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

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

如果打开,雄猫将提取战争。autodeploy


答案 2

这个有一个单线。

你可以简单地运行,

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 目录,并立即运行您的应用。


推荐