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

Deploying Java webapp to Tomcat 8 running in Docker container

我是 Tomcat 和 Docker 的新手 - 所以我可能在这个问题的某处遗漏了 Tomcat 基础知识。

我想做的是构建一个 Docker 容器,该容器运行 SpringBoot Restful Web 服务,仅 returns 一些静态数据。这是 OSX 上的全部 运行,所以我也在使用 Boot2Docker。

我已经编写了自己的 Docker 文件来构建我的应用程序在其中运行的容器:

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/

这个 Docker 文件工作正常,我可以从创建的映像启动容器。

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 复制到 Docker 文件中描述的路径。此外,我可以导航到 Tomcat 默认页面以确认 Tomcat 是 运行,我还可以点击所有示例等

关于问题,当我导航到 http://192.168.59.103:8888/myapp/getData 时,我得到了 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

http://192.168.59.103:8888/myapp/getData

这个有一个内衬。

您可以简单地 运行,

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 目录并立即获取您的应用程序 运行ning。