docker-compose tomcat не может получить доступ к общему объему - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь развернуть войну на док-контейнере для котов. Диспетчер Tomcat доступен по умолчанию на указанном http-порту. Я не хочу такого поведения. Чтобы избежать этого, я сделал файл контекста ROOT.xml, как описано здесь https://stackoverflow.com/a/7706950/3143009.

ROOT.xml доступен через том докера и содержит определение контекста:

<Context docBase="/usr/tomcat/custom-webapp/app.war" reloadable="true" />

ToНа мой взгляд, все правильно, но когда я пытаюсь запустить контейнер Tomcat, возникает исключение FileNotFindException, сообщающее, что /usr/tomcat/custom-webapp/app.war не найден tomcat (/ usr / tomcat / custom-webapp также является общимтом, содержащий файл app.war).

мой файл docker-compose:

version : '3'
    tomcat:
        image: tomcat:9.0.27-jdk8-openjdk
        hostname: tomcat
        restart: on-failure
        ports:
        - 10000:8080
        volumes:
        - ./data/logs/:/usr/local/tomcat/logs/
        - ./data/context-ROOT.xml:/usr/local/tomcat/conf/Catalina/localhost/ROOT.xml
        - ./data/custom-webapp:/usr/local/tomcat/custom-webapp 

Я уверен, что файл app.war смонтирован в контейнере. Я вижу это, когда я вхожу в контейнер или когда я делаю docker-compose run tomcat ls /usr/local/tomcat/custom-webapp. Но при запуске tomcat, похоже, не находит файл. Это странно для меня.

Кто-нибудь знает, почему контейнер tomcat не может получить доступ к файлу app.war?

ниже трассировки стека ошибок.

> tomcat_1    | 25-Oct-2019 14:43:55.287 INFO [main]
> org.apache.catalina.startup.HostConfig.deployDescriptor Deploying
> deployment descriptor
> [/usr/local/tomcat/conf/Catalina/localhost/ROOT.xml] tomcat_1    |
> 25-Oct-2019 14:43:55.307 WARNING [main]
> org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of
> deployment descriptor
> [/usr/local/tomcat/conf/Catalina/localhost/ROOT.xml] with an external
> docBase means the directory [/usr/local/tomcat/webapps/ROOT] in the
> appBase will be ignored tomcat_1    | 25-Oct-2019 14:43:55.331 SEVERE
> [main] org.apache.catalina.startup.ContextConfig.beforeStart Exception
> fixing docBase for context [] tomcat_1    |  
> java.io.FileNotFoundException: /usr/tomcat/custom-webapp/mytower.war
> (No such file or directory) tomcat_1    |           at
> java.io.FileInputStream.open0(Native Method) tomcat_1    |          
> at java.io.FileInputStream.open(FileInputStream.java:195) tomcat_1   
> |           at
> java.io.FileInputStream.<init>(FileInputStream.java:138) tomcat_1    |
> at java.io.FileInputStream.<init>(FileInputStream.java:93) tomcat_1   
> |           at
> sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
> tomcat_1    |           at
> sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
> tomcat_1    |           at
> org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:90)
> tomcat_1    |           at
> org.apache.catalina.startup.ContextConfig.fixDocBase(ContextConfig.java:615)
> tomcat_1    |           at
> org.apache.catalina.startup.ContextConfig.beforeStart(ContextConfig.java:747)
> tomcat_1    |           at
> org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:303)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:182)
> tomcat_1    |           at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
> tomcat_1    |           at
> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
> tomcat_1    |           at
> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
> tomcat_1    |           at
> org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:631)
> tomcat_1    |           at
> org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1831)
> tomcat_1    |           at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> tomcat_1    |           at
> java.util.concurrent.FutureTask.run(FutureTask.java:266) tomcat_1    |
> at
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
> tomcat_1    |           at
> java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
> tomcat_1    |           at
> org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:526)
> tomcat_1    |           at
> org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:425)
> tomcat_1    |           at
> org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
> tomcat_1    |           at
> org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
> tomcat_1    |           at
> org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
> tomcat_1    |           at
> org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> tomcat_1    |           at
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
> tomcat_1    |           at
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
> tomcat_1    |           at
> java.util.concurrent.FutureTask.run(FutureTask.java:266) tomcat_1    |
> at
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
> tomcat_1    |           at
> java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
> tomcat_1    |           at
> org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
> tomcat_1    |           at
> org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> tomcat_1    |           at
> org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> tomcat_1    |           at
> org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> tomcat_1    |           at
> org.apache.catalina.startup.Catalina.start(Catalina.java:633) tomcat_1
> |           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method) tomcat_1    |           at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> tomcat_1    |           at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> tomcat_1    |           at
> java.lang.reflect.Method.invoke(Method.java:498) tomcat_1    |        
> at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:344)
> tomcat_1    |           at
> org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:475)
> tomcat_1    | 25-Oct-2019 14:43:56.054 SEVERE [main]
> org.apache.catalina.startup.HostConfig.deployDescriptor Error
> deploying deployment descriptor
> [/usr/local/tomcat/conf/Catalina/localhost/ROOT.xml] tomcat_1    |  
> java.lang.IllegalStateException: Error starting child tomcat_1    |   
> at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:720)
> tomcat_1    |           at
> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
> tomcat_1    |           at
> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
> tomcat_1    |           at
> org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:631)
> tomcat_1    |           at
> org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1831)
> tomcat_1    |           at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> tomcat_1    |           at
> java.util.concurrent.FutureTask.run(FutureTask.java:266) tomcat_1    |
> at
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
> tomcat_1    |           at
> java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
> tomcat_1    |           at
> org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:526)
> tomcat_1    |           at
> org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:425)
> tomcat_1    |           at
> org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
> tomcat_1    |           at
> org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
> tomcat_1    |           at
> org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
> tomcat_1    |           at
> org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> tomcat_1    |           at
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
> tomcat_1    |           at
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
> tomcat_1    |           at
> java.util.concurrent.FutureTask.run(FutureTask.java:266) tomcat_1    |
> at
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
> tomcat_1    |           at
> java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
> tomcat_1    |           at
> org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
> tomcat_1    |           at
> org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> tomcat_1    |           at
> org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> tomcat_1    |           at
> org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> tomcat_1    |           at
> org.apache.catalina.startup.Catalina.start(Catalina.java:633) tomcat_1
> |           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method) tomcat_1    |           at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> tomcat_1    |           at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> tomcat_1    |           at
> java.lang.reflect.Method.invoke(Method.java:498) tomcat_1    |        
> at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:344)
> tomcat_1    |           at
> org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:475)
> tomcat_1    |   Caused by: org.apache.catalina.LifecycleException:
> Failed to start component
> [org.apache.catalina.webresources.StandardRoot@2a556333] tomcat_1    |
> at
> org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
> tomcat_1    |           at
> org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4800)
> tomcat_1    |           at
> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4935)
> tomcat_1    |           at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> tomcat_1    |           at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
> tomcat_1    |           ... 37 more tomcat_1    |   Caused by:
> java.lang.IllegalArgumentException: The main resource set specified
> [/usr/tomcat/custom-webapp/mytower.war] is not valid tomcat_1    |    
> at
> org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:752)
> tomcat_1    |           at
> org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:709)
> tomcat_1    |           at org.apache

1 Ответ

0 голосов
/ 26 октября 2019

Вы используете не тома, а bind-mounts. Это означает, что локальный путь к хосту смонтирован в контейнере, а содержимое ./data/custom-webapp заменит содержимое каталога /usr/local/tomcat/custom-webapp.

Поэтому ваш ROOT.xml должен выглядеть следующим образом:

<Context docBase="/usr/local/tomcat/custom-webapp/app.war" reloadable="true" />

иapp.war должен находиться в каталоге ./data/custom-webapp на вашем хосте.

...