将WAR部署到tomcat docker container后始终得到404

问题描述:

我有一个grails应用程序,它已经运行并通过Tomcat8 Jre8上的Elastic Beanstalk部署到AWS。将WAR部署到tomcat docker container后始终得到404

我现在试图部署它在多码头环境,我有很奇怪的行为。

我正在使用tomcat:8.0-jre8https://hub.docker.com/r/library/tomcat/)作为容器的映像,并且通过在<tomcat_home>/webapps中放置war文件,该映像上的部署非常简单。另外,我将端口8080映射到外部世界。因此,相关部分码头工人,组成这个样子的:

api: 
    image: tomcat:8.0-jre8 
    container_name: api 
    volumes: 
    - ./deployment/api:/usr/local/tomcat/webapps 
    external_links: 
    - mysql:mysql 
    ports: 
    - "8080:8080" 

基于日志,应用程序是越来越成功部署,并得到应用,甚至liquibase迁移:

21-Nov-2016 07:11:03.671 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive /usr/local/tomcat/webapps/priz-0.5.war 
21-Nov-2016 07:12:12.496 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 
2016-11-21T07:13:38.397268676Z 
Configuring Spring Security Core ... 
... finished configuring Spring Security Core 
2016-11-21T07:13:40.215275700Z 
2016-11-21T07:13:40.777432843Z 
Configuring Spring Security REST 2.0.0.M2... 
... finished configuring Spring Security REST 
2016-11-21T07:13:41.515464956Z 
INFO 11/21/16 7:14 AM: liquibase: Successfully acquired change log lock 
INFO 11/21/16 7:14 AM: liquibase: Reading from priz.DATABASECHANGELOG 
INFO 11/21/16 7:14 AM: liquibase: Successfully released change log lock 
21-Nov-2016 07:15:09.019 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /usr/local/tomcat/webapps/priz-0.5.war has finished in 245,345 ms 
21-Nov-2016 07:15:09.026 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"] 
21-Nov-2016 07:15:09.036 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-apr-8009"] 
21-Nov-2016 07:15:09.038 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 245425 ms 

然而,当我我试图访问任何一个现有的端点,我得到404回来。

现在,也是基于日志,请求实际上击中服务器:

==> ./logs/localhost_access_log.2016-11-21.txt <== 
172.17.0.1 - - [21/Nov/2016:07:15:09 +0000] "GET/HTTP/1.1" 404 - 
172.17.0.1 - - [21/Nov/2016:07:15:09 +0000] "GET/HTTP/1.1" 404 - 
172.17.0.1 - - [21/Nov/2016:07:16:45 +0000] "GET/HTTP/1.1" 404 - 
172.17.0.1 - - [21/Nov/2016:07:17:01 +0000] "GET/HTTP/1.1" 404 - 
172.17.0.1 - - [21/Nov/2016:07:17:07 +0000] "GET /index HTTP/1.1" 404 - 
172.17.0.1 - - [21/Nov/2016:07:28:24 +0000] "GET /api/user/register HTTP/1.1" 404 - 
172.17.0.1 - - [21/Nov/2016:07:28:46 +0000] "POST /api/user/register HTTP/1.1" 404 - 

我怎么连解决这个问题如何调试呢?我错过了什么? 日志中没有什么特别的。

另外,我尝试了不同版本的tomcat,包括在AWS EBS上运行的确切版本。 另外,尝试通过nginx接受请求,结果相同。

你的war文件名是priz-0.5.war。所以上下文名称也是priz-0.5。 你必须调用例如http://localhost:8080/priz-0.5

如果你想这样称呼它​​战争文件只是重命名为ROOT.war

+0

哇,我没想到!我如何改变这个以响应根?或者,至少,我是否让版本之间保持一致?另外,为什么我以前的部署不需要这样做,并且如果我通过'run-app'启动应用程序,则可以在没有上下文的情况下使用它。 –

+2

@ShurikAgulyansky我编辑了我的答案。 – dit