2016-11-21 5 views
4

У меня есть приложение grails, которое уже запускается и развертывается в AWS через Elastic Beanstalk на Tomcat8 Jre8.После развертывания WAR для контейнера докеры tomcat, всегда получающего 404

Теперь я пытаюсь развернуть его в среде с несколькими докерами, и у меня довольно странное поведение.

Я использую tomcat:8.0-jre8 (https://hub.docker.com/r/library/tomcat/) как изображение для контейнера, а развертывание на этом изображении довольно просто, поставив файл войны в <tomcat_home>/webapps. Кроме того, я сопоставляю порт 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

Ваше имя файла войны priz-0.5.war. Таким образом, имя контекста также равно priz-0.5. Вы должны назвать, например http://localhost:8080/priz-0.5

Если вы хотите назвать это как http://localhost:8080/ просто переименовать войны-файл в ROOT.war

+0

Ничего себе, я не ожидал! Как изменить это для ответа на root? Или, по крайней мере, хо, я делаю это согласованным между версиями? Кроме того, почему мое предыдущее развертывание не требовало этого, и если я запустил приложение через 'run-app', я могу использовать его без контекста. –

+2

@ShurikAgulyansky Я отредактировал свой ответ. – dit

Смежные вопросы