【问题标题】:Deploying Java webapp to Tomcat 8 running in Docker container将 Java webapp 部署到在 Docker 容器中运行的 Tomcat 8
【发布时间】:2015-05-25 21:54:04
【问题描述】:

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

【问题讨论】:

  • 你从哪里得到的 IP 地址?
  • 这是分配给我的 Boot2Docker VM 的那个。在没有 /myapp 的情况下点击该 IP:port 会显示默认的 Tomcat 页面。
  • 我是 Linux 人,所以行为可能会有所不同,但请尝试访问 localhost:8080。
  • 这不行,因为容器运行在由 Boot2Docker 管理的 VM 中,这与在 Linux 上本地运行 Docker 有点不同。
  • 检查你的tomcat的日志,我不认为tomcat能够加载你的应用程序,因为你没有将战争放在webapps中,而是放在子文件夹中。检查此article 它可能会有所帮助。

标签: java tomcat docker spring-boot war


【解决方案1】:

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

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

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

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

【讨论】:

  • 这仅在自动部署设置为 true 时有效。我们如何在命令行中部署它?
【解决方案2】:

这个有一个oneliner。

你可以简单地运行,

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

【讨论】:

  • 这将替换 tomcat 目录中任何现有的 webapps 并且只复制一场战争?如果不希望这样做,您可能必须使用暂存区并将战争从那里复制到 tomcat/webapps
【解决方案3】:

Tomcat 只会提取复制到webapps 目录的战争。 更改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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多