2016-11-21 640 views
4

我有一個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接受請求,結果相同。

回答

2

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

如果你想這樣稱呼它​​戰爭文件只是重命名爲ROOT.war

+0

哇,我沒想到!我如何改變這個以響應根?或者,至少,我是否讓版本之間保持一致?另外,爲什麼我以前的部署不需要這樣做,並且如果我通過'run-app'啓動應用程序,則可以在沒有上下文的情況下使用它。 –

+2

@ShurikAgulyansky我編輯了我的答案。 – dit