Geoserver docker 2.28.x broken

I dont know if this issue is on the right place:
Since last week the geoserver docker is broken, i’m using docker.osgeo.org/geoserver:2.28.0
log:
3-Nov-2025 11:41:04.083 SEVERE [main] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file

03-Nov-2025 11:41:04.087 SEVERE [main] org.apache.catalina.core.StandardContext.startInternal Context [/geoserver] startup failed due to previous errors

version 2.28.0 is still working, anyone an idea?
I dont see any errors in the docker logs.

You should really be on the GeoServer-Users topic (I can’t work out how to forward a message though),

Anyway, you need to look at the geoserver log file to see what is failing rather than the docker logs.

Ian

you cant read the geoserver logs, because the server wont start, so you cant reach the log files.

So log in and use an editor or pager to view the file on disk.

Ian

I was able to move the topic to the correct category.

In October I worked on docker as part of the code freezes for GeoServer 3. The work I did was to make docker choose tomcat 9 or tomcat 11 base image based on the version of GeoServer being published. The 2.28.0 release was made previously so it should not be affected …

.. so yes if you have more details, perhaps exactly what you used to start up with, it would be good to know what is going on.

For GeoServer 3.x nightly builds testing docker and the install instructions is something to be done.

We also have the new idea of “pending” community modules which will be published alongside GeoServer as they seek wider resources/funding/testing/deployments to be made official extensions.

I just run a clean docker image like this:

docker run -d --name geoserver-test -p 8080:8080 docker.osgeo.org/geoserver:2.28.x

and it ends in an error, tomcat is up and running and this are the logs from docker:

*Welcome to GeoServer 2.28-SNAPSHOT*
*Initialize /opt/geoserver_data/ from data directory included in geoserver.war*
*Starting installation of extensions*
*Finished installation of extensions*
*Installing default server.xml with substituted environment variables*
*NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED*
*usage: java org.apache.catalina.startup.Catalina \[ -config {pathname} \] \[ -nonaming \] \[ -generateCode \[ {pathname} \] \] \[ -useGeneratedCode \] { -help | start | stop }*
*06-Nov-2025 08:01:21.636 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   i_am_a_teapot*
*06-Nov-2025 08:01:21.639 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Server built:*          
*06-Nov-2025 08:01:21.639 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Server version number: x.y.z.0*
*06-Nov-2025 08:01:21.639 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux*
*06-Nov-2025 08:01:21.639 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            5.14.0-570.55.1.el9_6.x86_64*
*06-Nov-2025 08:01:21.640 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64*
*06-Nov-2025 08:01:21.640 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /opt/java/openjdk*
*06-Nov-2025 08:01:21.640 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.28+6*
*06-Nov-2025 08:01:21.640 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Eclipse Adoptium*
*06-Nov-2025 08:01:21.640 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat*
*06-Nov-2025 08:01:21.640 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat*
*06-Nov-2025 08:01:21.655 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED*
*06-Nov-2025 08:01:21.657 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.invoke=ALL-UNNAMED*
*06-Nov-2025 08:01:21.658 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.reflect=ALL-UNNAMED*
*06-Nov-2025 08:01:21.658 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED*
*06-Nov-2025 08:01:21.658 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED*
*06-Nov-2025 08:01:21.658 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED*
*06-Nov-2025 08:01:21.659 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED*
*06-Nov-2025 08:01:21.659 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties*
*06-Nov-2025 08:01:21.659 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager*
*06-Nov-2025 08:01:21.660 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048*
*06-Nov-2025 08:01:21.660 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources*
*06-Nov-2025 08:01:21.660 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dsun.io.useCanonCaches=false*
*06-Nov-2025 08:01:21.660 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027*
*06-Nov-2025 08:01:21.661 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xms256m*
*06-Nov-2025 08:01:21.663 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx1g*
*06-Nov-2025 08:01:21.663 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-exports=java.desktop/com.sun.imageio.plugins.jpeg=ALL-UNNAMED*
*06-Nov-2025 08:01:21.663 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-exports=java.desktop/com.sun.imageio.plugins.png=ALL-UNNAMED*
*06-Nov-2025 08:01:21.663 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-exports=java.desktop/sun.awt.image=ALL-UNNAMED*
*06-Nov-2025 08:01:21.663 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED*
*06-Nov-2025 08:01:21.663 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED*
*06-Nov-2025 08:01:21.664 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.reflect=ALL-UNNAMED*
*06-Nov-2025 08:01:21.664 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.text=ALL-UNNAMED*
*06-Nov-2025 08:01:21.664 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.desktop/java.awt.font=ALL-UNNAMED*
*06-Nov-2025 08:01:21.664 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.desktop/java.awt.image=ALL-UNNAMED*
*06-Nov-2025 08:01:21.664 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.desktop/javax.imageio.stream=ALL-UNNAMED*
*06-Nov-2025 08:01:21.664 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.desktop/javax.imageio=ALL-UNNAMED*
*06-Nov-2025 08:01:21.665 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.desktop/sun.awt.image=ALL-UNNAMED*
*06-Nov-2025 08:01:21.665 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.naming/com.sun.jndi.ldap=ALL-UNNAMED*
*06-Nov-2025 08:01:21.665 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.desktop/sun.java2d.pipe=ALL-UNNAMED*
*06-Nov-2025 08:01:21.665 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.awt.headless=true*
*06-Nov-2025 08:01:21.666 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dfile.encoding=UTF-8*
*06-Nov-2025 08:01:21.666 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djavax.servlet.request.encoding=UTF-8*
*06-Nov-2025 08:01:21.666 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djavax.servlet.response.encoding=UTF-8*
*06-Nov-2025 08:01:21.667 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -D-XX:SoftRefLRUPolicyMSPerMB=36000*
*06-Nov-2025 08:01:21.667 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xbootclasspath/a:/usr/local/tomcat/lib/marlin.jar*
*06-Nov-2025 08:01:21.667 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dsun.java2d.renderer=sun.java2d.marlin.DMarlinRenderingEngine*
*06-Nov-2025 08:01:21.668 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.geotools.coverage.jaiext.enabled=true*
*06-Nov-2025 08:01:21.668 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=*
*06-Nov-2025 08:01:21.668 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat*
*06-Nov-2025 08:01:21.668 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat*
*06-Nov-2025 08:01:21.668 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp*
*06-Nov-2025 08:01:21.702 INFO \[main\] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library \[1.3.1\] using APR version \[1.7.2\].*
*06-Nov-2025 08:01:21.702 INFO \[main\] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 \[true\], sendfile \[true\], accept filters \[false\], random \[true\], UDS \[true\].*
*06-Nov-2025 08:01:21.703 INFO \[main\] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector \[false\], useOpenSSL \[true\]*
*06-Nov-2025 08:01:21.708 INFO \[main\] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized \[OpenSSL 3.0.13 30 Jan 2024\]*
*06-Nov-2025 08:01:22.084 INFO \[main\] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler \["http-nio-8080"\]*
*06-Nov-2025 08:01:22.120 INFO \[main\] org.apache.catalina.startup.Catalina.load Server initialization in \[874\] milliseconds*
*06-Nov-2025 08:01:22.199 INFO \[main\] org.apache.catalina.core.StandardService.startInternal Starting service \[Catalina\]*
*06-Nov-2025 08:01:22.200 INFO \[main\] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: \[i_am_a_teapot\]*
*06-Nov-2025 08:01:28.816 INFO \[main\] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.*
*06-Nov-2025 08:01:28.840 SEVERE \[main\] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file*
*06-Nov-2025 08:01:28.851 SEVERE \[main\] org.apache.catalina.core.StandardContext.startInternal Context \[/geoserver\] startup failed due to previous errors*
*06-Nov-2025 08:01:29.128 INFO \[main\] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler \["http-nio-8080"\]*
*06-Nov-2025 08:01:29.147 INFO \[main\] org.apache.catalina.startup.Catalina.start Server startup in \[7025\] milliseconds*

and i was able to grep the tomcat logs:

*cat localhost.log
06-Nov-2025 08:01:28.822 INFO \[main\] org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath
06-Nov-2025 08:01:28.826 SEVERE \[main\] org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class \[org.geoserver.GeoserverInitStartupListener\]
java.lang.UnsupportedClassVersionError: org/geoserver/GeoserverInitStartupListener has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0 (unable to load class \[org.geoserver.GeoserverInitStartupListener\])
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2346)
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2212)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:821)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1312)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1160)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:484)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:466)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3974)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4489)
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:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:747)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:719)
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:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:747)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:209)
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:872)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:736)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
06-Nov-2025 08:01:28.829 SEVERE \[main\] org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class \[org.geoserver.logging.LoggingStartupContextListener\]
java.lang.UnsupportedClassVersionError: org/geoserver/logging/LoggingStartupContextListener has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0 (unable to load class \[org.geoserver.logging.LoggingStartupContextListener\])
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2346)
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2212)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:821)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1312)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1160)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:484)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:466)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3974)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4489)
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:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:747)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:719)
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:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:747)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:209)
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:872)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:736)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
06-Nov-2025 08:01:28.830 SEVERE \[main\] org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class \[org.geoserver.platform.GeoServerContextLoaderListener\]
java.lang.UnsupportedClassVersionError: org/geoserver/platform/GeoServerContextLoaderListener has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0 (unable to load class \[org.geoserver.platform.GeoServerContextLoaderListener\])
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2346)
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2212)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:821)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1312)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1160)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:484)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:466)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3974)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4489)
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:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:747)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:719)
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:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:747)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:209)
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:872)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:736)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
06-Nov-2025 08:01:28.832 SEVERE \[main\] org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class \[org.geoserver.platform.GeoServerHttpSessionListenerProxy\]
java.lang.UnsupportedClassVersionError: org/geoserver/platform/GeoServerHttpSessionListenerProxy has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0 (unable to load class \[org.geoserver.platform.GeoServerHttpSessionListenerProxy\])
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2346)
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2212)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:821)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1312)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1160)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:484)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:466)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3974)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4489)
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:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:747)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:719)
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:82)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:747)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:209)
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:872)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Catalina.start(Catalina.java:736)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
06-Nov-2025 08:01:28.840 SEVERE \[main\] org.apache.catalina.core.StandardContext.listenerStart Skipped installing application listeners due to previous error(s)*

I think I see the problem:

*06-Nov-2025 08:01:21.640 INFO \[main\] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.28+6*

2.28.x is Java 17 minimum now, the release.sh script should be selecting a different base image.

      if [[ "$VERSION" == "3."* ]]; then
         GEOSERVER_BASE_IMAGE=tomcat:11.0-jdk21-temurin-noble
      else
         GEOSERVER_BASE_IMAGE=tomcat:9.0-jdk11-temurin-noble
      fi

We need some logic for:

  • 3.0.x - tomcat 11 jdk17
  • 2.28.x - tomcat 9 jdk17
  • other - tomcat 9 jdk11

Any takers?

I did a simple fix, as JDK17 can be used for active branches of GeoServer.

I note however that many recent docker builds are failing:

+ wget -c -q -O /tmp/geoserver.zip https://build.geoserver.org/geoserver/main/geoserver-main-latest-war.zip
[0me[91m+ unzip geoserver.zip geoserver.war -d /tmp/
[0mArchive:  geoserver.zip
[91merror [geoserver.zip]:  start of central directory not found;
  zipfile corrupt.
  (please check that you have transferred or created the zipfile in the
  appropriate BINARY mode and that you have compiled UnZip properly)

When I go to these URLs directly, it is fine. I expect I am not good at the wget syntax.

Because we build a normal and a gdal image an attempt is made to avoid downloading zip twice.

I have managed to get the docker 2.28.x to build again (clearing the download prior to each run).

It should now use tomcat 9 and JDK 17 and thus start up - Please give it a go and let me know if works!

1 Like

Yes i downloaded the latest version and it is solved, thank you!