WAR部署到tomcat docker容器后总是得到404

我有一个Grails应用程序,已经运行,并通过Tomcat8 Jre8上的Elastic Beanstalk部署到AWS。

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

我正在使用tomcat:8.0-jre8 ( https://hub.docker.com/r/library/tomcat/ )作为容器的映像,并且在该映像上的部署非常简单,方法是将war文件放在<tomcat_home>/webapps 。 另外,我正在将8080端口映射到外部世界。 因此,docker-compose的相关部分如下所示:

 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 - 

我怎样才能解决这个问题,如何debugging呢? 我错过了什么? 日志中没有什么特别的。

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

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

如果你想把它叫做http://localhost:8080/只是把war-File重命名为ROOT.war