AxonServer 2023.2.0 docker startup error: Unable to create cache directory: ./plugins/cache (again)

Axon Server v2023.2.0 does not startup properly as Docker container (same as with v2023.1.2:-(.

I guess the workaround with volume mapping would work, but I want to start Axon Server as plain as possible in Test Containers and this does not work.

$ docker run --rm axoniq/axonserver:2023.2.0-jdk-17-dev-nonroot
     _                     ____
    / \   __  _____  _ __ / ___|  ___ _ ____   _____ _ __
   / _ \  \ \/ / _ \| '_ \\___ \ / _ \ '__\ \ / / _ \ '__|
  / ___ \  >  < (_) | | | |___) |  __/ |   \ V /  __/ |
 /_/   \_\/_/\_\___/|_| |_|____/ \___|_|    \_/ \___|_|
 2023.2.0                      Powered by AxonIQ

2023-10-30 16:28:48.686  INFO 1 --- [           main] io.axoniq.axonserver.AxonServer          : Starting AxonServer using Java 17.0.8.1 on 76d650883b81 with PID 1 (/axonserver/axonserver.jar started by axonserver in /axonserver)
2023-10-30 16:28:48.692  INFO 1 --- [           main] io.axoniq.axonserver.AxonServer          : No active profile set, falling back to 1 default profile: "default"
2023-10-30 16:28:53.486  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8024 (http)
2023-10-30 16:28:53.700  WARN 1 --- [           main] i.a.a.c.MessagingPlatformConfiguration   : The hostname has been set as an IP address. This may produce unwanted results.
2023-10-30 16:28:53.702  WARN 1 --- [           main] i.a.a.c.MessagingPlatformConfiguration   : The internal hostname has been set as an IP address. This may produce unwanted results.
2023-10-30 16:28:53.703  INFO 1 --- [           main] A.i.a.a.c.MessagingPlatformConfiguration : Configuration initialized with SSL DISABLED and access control DISABLED.
2023-10-30 16:28:54.727  WARN 1 --- [           main] o.f.core.internal.command.DbMigrate      : outOfOrder mode is active. Migration of schema "PUBLIC" may not be reproducible.
2023-10-30 16:28:58.365  INFO 1 --- [           main] io.axoniq.axonserver.AxonServer          : Axon Server version 2023.2.0
ERROR: Unable to create cache directory: ./plugins/cache
ERROR: Error creating bundle cache.
java.lang.RuntimeException: Unable to create cache directory.
2023-10-30 16:29:04.220  WARN 1 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'pluginPackageManager'; nested exception is io.axoniq.axonserver.exception.MessagingPlatformException: [AXONIQ-0001] OSGi Failed to Start
	at org.apache.felix.framework.cache.BundleCache.<init>(BundleCache.java:135)
	at org.apache.felix.framework.Felix.init(Felix.java:711)
	at org.apache.felix.framework.Felix.init(Felix.java:648)
	at org.apache.felix.framework.Felix.start(Felix.java:1111)
	at io.axoniq.axonserver.plugin.OsgiController.start(OsgiController.java:110)
	at io.axoniq.axonserver.plugin.PluginPackageManager.start(PluginPackageManager.java:68)
	at io.axoniq.axonserver.plugin.PluginPackageManager$$FastClassBySpringCGLIB$$7358b268.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386)
	at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703)
	at io.axoniq.axonserver.plugin.PluginPackageManager$$EnhancerBySpringCGLIB$$7d2b3984.start(<generated>)
	at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:179)
	at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54)
	at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:357)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:156)
	at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:124)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:938)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289)
	at io.axoniq.axonserver.AxonServer.main(ez:179)
	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:568)
	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
	at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:467)
2023-10-30 16:29:04.353 ERROR 1 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.context.ApplicationContextException: Failed to start bean 'pluginPackageManager'; nested exception is io.axoniq.axonserver.exception.MessagingPlatformException: [AXONIQ-0001] OSGi Failed to Start
	at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182) ~[spring-context-5.3.30.jar!/:5.3.30]
	at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.30.jar!/:5.3.30]
	at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:357) ~[spring-context-5.3.30.jar!/:5.3.30]
	at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
	at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:156) ~[spring-context-5.3.30.jar!/:5.3.30]
	at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:124) ~[spring-context-5.3.30.jar!/:5.3.30]
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:938) ~[spring-context-5.3.30.jar!/:5.3.30]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.30.jar!/:5.3.30]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.17.jar!/:2.7.17]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-2.7.17.jar!/:2.7.17]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409) ~[spring-boot-2.7.17.jar!/:2.7.17]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.17.jar!/:2.7.17]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) ~[spring-boot-2.7.17.jar!/:2.7.17]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289) ~[spring-boot-2.7.17.jar!/:2.7.17]
	at io.axoniq.axonserver.AxonServer.main(ez:179) ~[classes!/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[axonserver.jar:na]
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) ~[axonserver.jar:na]
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[axonserver.jar:na]
	at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:467) ~[axonserver.jar:na]
Caused by: io.axoniq.axonserver.exception.MessagingPlatformException: [AXONIQ-0001] OSGi Failed to Start
	at io.axoniq.axonserver.plugin.OsgiController.start(OsgiController.java:125) ~[axonserver-2023.2.0.jar!/:na]
	at io.axoniq.axonserver.plugin.PluginPackageManager.start(PluginPackageManager.java:68) ~[axonserver-2023.2.0.jar!/:na]
	at io.axoniq.axonserver.plugin.PluginPackageManager$$FastClassBySpringCGLIB$$7358b268.invoke(<generated>) ~[axonserver-2023.2.0.jar!/:na]
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.30.jar!/:5.3.30]
	at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.30.jar!/:5.3.30]
	at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.30.jar!/:5.3.30]
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.30.jar!/:5.3.30]
	at io.axoniq.axonserver.plugin.PluginPackageManager$$EnhancerBySpringCGLIB$$7d2b3984.start(<generated>) ~[axonserver-2023.2.0.jar!/:na]
	at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:179) ~[spring-context-5.3.30.jar!/:5.3.30]
	... 22 common frames omitted
Caused by: org.osgi.framework.BundleException: Error creating bundle cache.
	at org.apache.felix.framework.Felix.init(Felix.java:716) ~[org.apache.felix.framework-7.0.5.jar!/:na]
	at org.apache.felix.framework.Felix.init(Felix.java:648) ~[org.apache.felix.framework-7.0.5.jar!/:na]
	at org.apache.felix.framework.Felix.start(Felix.java:1111) ~[org.apache.felix.framework-7.0.5.jar!/:na]
	at io.axoniq.axonserver.plugin.OsgiController.start(OsgiController.java:110) ~[axonserver-2023.2.0.jar!/:na]
	... 30 common frames omitted
Caused by: java.lang.RuntimeException: Unable to create cache directory.
	at org.apache.felix.framework.cache.BundleCache.<init>(BundleCache.java:135) ~[org.apache.felix.framework-7.0.5.jar!/:na]
	at org.apache.felix.framework.Felix.init(Felix.java:711) ~[org.apache.felix.framework-7.0.5.jar!/:na]
	... 33 common frames omitted

Do you have a special requirement to use the nonroot version of the Docker image? There is also the version of the docker image that runs Axon Server as root (axoniq/axonserver:2023.2.0-jdk-17), which does not require these volume mappings.

Well, I could do this.
But I think the nonroot container should also be able to start without errors or at least it should be clearly documented, how it can be started. Usually you first look for errors on your own side if a docker container does not start. It’s just a bit annoying that the container does not startup without further configuration.

1 Like