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

标签 java tomcat docker spring-boot war

我对 Tomcat 和 Docker 还很陌生 - 所以我可能在这个问题的某个地方缺少 Tomcat 基础知识。

我要做的是构建一个运行 SpringBoot Restful Web 服务的 Docker 容器,该服务只返回一些静态数据。这都是在 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 的内容?

最佳答案

您正在尝试将 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 。

关于java - 将 Java webapp 部署到在 Docker 容器中运行的 Tomcat 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29201262/

相关文章:

java - 并行迭代大 HashMap

java - 如何在不重启应用程序的情况下通过 Java Web 应用程序反射(reflect)电子表格中的更改?

linux - 允许 Docker 缓存 RUN 结果

docker - 厨房-Docker 和 Systemd

java - 标记/注释可优化代码的标准方法?

java - 可以覆盖 Set 的 contains() 方法吗?

java - 父方法可以检查哪个子方法调用了它吗?

asp.net - 是否可以在 IIS 服务器中运行 asp.net 和 java web 应用程序?

java - 无法在 Tomcat 项目的测试中连接 Java ServlextContext

docker - Flask + Nginx反向代理拒绝在Docker容器中进行连接