Служба Tomcat недоступна (ошибка 404) в контейнере Docker - PullRequest
0 голосов
/ 28 мая 2018

Я использую Tomcat 7 в контейнере на основе образа CentOS 7, но не могу получить доступ ни к одному из развернутых приложений.Даже это: curl -v 'http://localhost:8080' run из контейнера возвращает ошибку:

* About to connect() to localhost port 8080 (#0)
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost:8080
> Accept: */*
> 
< HTTP/1.1 404 Not Found
< Server: Apache-Coyote/1.1
< Content-Length: 0
< Date: Mon, 28 May 2018 13:14:41 GMT
< 
* Connection #0 to host localhost left intact

Замена localhost на IP-адрес контейнера 172.17.0.2 выдает ту же ошибку.

Я связал порт 8080 контейнера с портом хоста 28080 с параметром docker run -p 28080:8080, но также не могу получить доступ к службе с хоста.Однако я попытался использовать nginx в контейнере, и он работал отлично (я мог получить к нему доступ как с хоста, так и с контейнера), поэтому я предполагаю, что это проблема Tomcat, а не Docker.

Более того, я запустил nmap, что приводит к этому:

[root@a115404a7a03 /]# nmap -sT -O localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-05-28 13:23 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000070s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 993 closed ports
PORT     STATE SERVICE
5432/tcp open  postgresql
7001/tcp open  afs3-callback
7002/tcp open  afs3-prserver
7004/tcp open  afs3-kaserver
7007/tcp open  afs3-bos
8009/tcp open  ajp13
8080/tcp open  http-proxy

, и я нахожу странным, что служба для порта 8080 http-proxy, а не просто http.Я не нашел никаких настроек прокси в файлах конфигурации Tomcat, и переменная окружения http_proxy не установлена.

Я включаю службу Tomcat следующим образом в моем Dockerfile: RUN systemctl enable tomcat.service.

Я подумал, что это может быть связано с тем фактом, что я создаю образ с установленными переменными окружения прокси (используя --build-arg), но я удалил приведенную выше строку из Dockerfile и запустил ее вручную, как только контейнер запустился, и он не 'не работает.

И последнее: одно из приложений, которые я развертываю в Tomcat, запускает тестовый запрос после его развертывания, и я вижу в журналах, что он работает, он получает код 200:

127.0.0.1 - - [28/May/2018:13:03:00 +0000] "GET /rasdaman/ows?service=WCS&version=2.0.1&request=GetCapabilities HTTP/1.1" 200 9420

Если я запускаю curl -v 'http://localhost:8080/rasdaman/ows?service=WCS&version=2.0.1&request=GetCapabilities, но я получаю сообщение об ошибке 404.

Есть идеи о том, что происходит?

Спасибо

РЕДАКТИРОВАТЬ

Я попытался запустить nmap с опцией -sV, и вот что я получил:

[root@a115404a7a03 /]# nmap -sV -O localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-05-28 14:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000060s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 993 closed ports
PORT     STATE SERVICE        VERSION
5432/tcp open  postgresql     PostgreSQL DB
7001/tcp open  afs3-callback?
7002/tcp open  afs3-prserver?
7004/tcp open  afs3-kaserver?
7007/tcp open  afs3-bos?
8009/tcp open  ajp13          Apache Jserv (Protocol v1.3)
8080/tcp open  http           Apache Tomcat/Coyote JSP engine 1.1

Показывает http, а не http-proxy.

РЕДАКТИРОВАТЬ 2

Ниже находится файл Docker:

FROM centos:7

# Install prerequisites
RUN yum clean all
RUN yum -q -y update
RUN yum -q -y install sudo curl wget less vim unzip
RUN yum -q -y install epel-release

RUN sed -i '/^Defaults.*requiretty$/d' /etc/sudoers

# Instructions at http://rasdaman.org/wiki/InstallFromRPM
RUN curl "http://download.rasdaman.org/packages/rpm/nightly/CentOS/7/x86_64/rasdaman.repo" -o /etc/yum.repos.d/rasdaman.repo
RUN yum clean all
RUN yum -q -y update && yum -y install rasdaman
RUN test -f /etc/profile.d/rasdaman.sh && source /etc/profile.d/rasdaman.sh

# Install python dependencies
RUN pip install glob2

# Enable on startup
RUN systemctl enable postgresql.service
RUN systemctl enable tomcat.service   ## I tried with this line commented or not, see above.
RUN systemctl enable rasdaman.service

RUN /etc/init.d/rasdaman start

# Tomcat (localhost:8080/rasdaman/ows)
EXPOSE 8080

RUN yum -q -y install nmap

CMD ["/usr/sbin/init"]

РЕДАКТИРОВАТЬ 3

Этовыписка из журналов Tomcat:

May 30, 2018 8:25:09 AM org.apache.catalina.startup.HostConfig deployWARs
SEVERE: Error waiting for multi-thread deployment of WAR files to complete
java.lang.InterruptedException
    at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:404)
    at java.util.concurrent.FutureTask.get(FutureTask.java:191)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:832)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:495)
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1757)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:333)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1370)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1542)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1552)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1520)
    at java.lang.Thread.run(Thread.java:748)

May 30, 2018 8:25:11 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deployment of web application archive /var/lib/tomcat/webapps/rasdaman.war has finished in 35,256 ms
...