I'm trying to deploye a war on a tomcat docker container. Tomcat manager is accessible by default on the listined http port. I don't want this behavior. To avoid this i hava done a ROOT.xml context file as explained here https://stackoverflow.com/a/7706950/3143009.
ROOT.xml is shared via docker volume and contains context definition :
<Context docBase="/usr/tomcat/custom-webapp/app.war" reloadable="true" />
To my mind all things are right but when i try to start tomcat container, an FileNotFindException occurs telling that /usr/tomcat/custom-webapp/app.war is not found by tomcat (/usr/tomcat/custom-webapp is also a shared volume containing a app.war file).
my docker-compose file :
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
I'm sure that the app.war file is mounted in the container. I can see it when I enter in the container or when i do docker-compose run tomcat ls /usr/local/tomcat/custom-webapp
. But on startup, tomcat seems to not find the file. That is strange for me.
Has anyone know why tomcat container cannot access to the app.war file ?
below error stacktrace.
> 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