Skip to content

"Unable to create the directory [/usr/local/tomcat/webapps/myapp]" error when running as non-root user #337

@rcsilva83

Description

@rcsilva83

When I run my application's container as a non-root user (id 1000) I get the error below on startup. I couldn't find any documentation on the best solution for this. I guess a chmod 777 /usr/local/tomcat/webapps/ isn't a great solution. I found some comments on the Internet (Stackoverflow etc) indicating changing ownership of the whole Tomcat Home folder (chown -R 1000 /usr/local/tomcat/) which I don't know if would be the best approach.

What the maintainers indicate?

09-Apr-2026 13:25:18.213 SEVERE [main] org.apache.catalina.startup.ContextConfig.beforeStart Exception fixing docBase for context [/myapp]
 java.io.IOException: Unable to create the directory [/usr/local/tomcat/webapps/myapp]
  at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:107)
  at org.apache.catalina.startup.ContextConfig.fixDocBase(ContextConfig.java:811)
  at org.apache.catalina.startup.ContextConfig.beforeStart(ContextConfig.java:947)
  at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:290)
  at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
  at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:163)
  at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:597)
  at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:569)
  at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:665)
  at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:962)
  at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1900)
  at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
  at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
  at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:81)
  at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123)
  at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:766)
  at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:417)
  at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1618)
  at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:300)
  at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
  at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
  at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
  at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:774)
  at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:783)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
  at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1201)
  at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1191)
  at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
  at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:81)
  at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
  at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:747)
  at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:201)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
  at org.apache.catalina.core.StandardService.startInternal(StandardService.java:410)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
  at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:868)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
  at org.apache.catalina.startup.Catalina.start(Catalina.java:758)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.base/java.lang.reflect.Method.invoke(Method.java:569)
  at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
  at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions