You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XWiki Docker Swarm容器随机崩溃,许可证加载错误求助

XWiki LTS-MySQL容器在Docker Swarm中随机崩溃问题

问题场景

在Docker Swarm环境中运行xwiki:lts-mysql容器时,容器会随机崩溃,崩溃前可正常运行。

Docker Compose配置

xwiki:
  image: xwiki:lts-mysql
  environment:
    DB_DATABASE: ${XWIKI_DB}
    DB_USER: ${XWIKI_USER}
    DB_PASSWORD: ${XWIKI_PASS}
    DB_HOST: mysql
  volumes:
    - ./xwiki:/usr/local/xwiki
  networks:
    - web
    - mysql-net
  deploy:
    resources:
      limits:
        cpus: '1.00'
        memory: 1024m

崩溃时的堆栈信息

java.lang.NullPointerException: null
  at org.xwiki.extension.internal.DefaultExtensionLicenseManager.initialize(DefaultExtensionLicenseManager.java:94)
  at org.xwiki.component.embed.InitializableLifecycleHandler.handle(InitializableLifecycleHandler.java:39)
  at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:365)
  at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
  at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)
  at org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:406)
  at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)
  at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
  at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)
  at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:189)
  at org.xwiki.extension.repository.internal.local.LocalExtensionStorage.<init>(LocalExtensionStorage.java:91)
  at org.xwiki.extension.repository.internal.local.DefaultLocalExtensionRepository.initialize(DefaultLocalExtensionRepository.java:100)
  at org.xwiki.component.embed.InitializableLifecycleHandler.handle(InitializableLifecycleHandler.java:39)
  at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:365)
  at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
  at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)
  at org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:406)
  at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)
  at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
  at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)
  at org.xwiki.component.embed.EmbeddableComponentManager.getDependencyInstance(EmbeddableComponentManager.java:406)
  at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:355)
  at org.xwiki.component.embed.EmbeddableComponentManager.getComponentInstance(EmbeddableComponentManager.java:451)
  at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:201)
  at org.xwiki.component.embed.EmbeddableComponentManager.getInstance(EmbeddableComponentManager.java:189)
  at org.xwiki.container.servlet.XWikiServletContextListener.contextInitialized(XWikiServletContextListener.java:116)
  at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4764)
  at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5222)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
  at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726)
  at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:698)
  at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:696)
  at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1184)
  at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1932)
  at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
  at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
  at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
  at java.base/java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
  at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1094)
  at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:476)
  at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1617)
  at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:318)
  at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
  at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
  at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
  at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943)
  at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:835)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
  at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
  at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1383)
  at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
  at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
  at java.base/java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
  at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
  at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:265)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
  at org.apache.catalina.core.StandardService.startInternal(StandardService.java:430)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
  at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
  at org.apache.catalina.startup.Catalina.start(Catalina.java:772)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  at java.base/java.lang.reflect.Method.invoke(Unknown Source)
  at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347)
  at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478)
2023-01-02 20:28:14,183 [main] ERROR DefaultExtensionLicenseManager - Failed to load license file at [null] 
java.lang.NullPointerException: null
  at org.xwiki.extension.internal.DefaultExtensionLicenseManager.initialize(DefaultExtensionLicenseManager.java:94)
  at org.xwiki.component.embed.InitializableLifecycleHandler.handle(InitializableLifecycleHandler.java:39)
  at org.xwiki.component.embed.EmbeddableComponentManager.createInstance(EmbeddableComponentManager.java:365)
  at org.xwiki.component.embed.Embeddable

问题分析

从堆栈信息看,核心错误是DefaultExtensionLicenseManager初始化时触发的空指针异常,提示无法加载路径为null的许可证文件。结合配置,问题大概率出在以下两点:

  • 本地卷挂载./xwiki:/usr/local/xwiki,如果本地目录是手动创建的,可能缺少容器启动所需的默认许可证文件,或者权限配置错误导致容器无法读取必要文件。
  • 配置中内存限制仅1024m,XWiki LTS运行时内存不足,触发GC或服务异常,间接导致组件初始化失败。

解决方案

1. 修复卷挂载问题

  • 先备份本地./xwiki目录内容,再删除该目录,让容器重新初始化生成完整的默认文件结构:
    mv ./xwiki ./xwiki_backup
    
  • 重新启动容器,容器会自动创建/usr/local/xwiki下的所有默认文件,包括许可证相关文件。
  • 待容器稳定运行后,将备份的重要数据(如数据目录、自定义配置)迁移回新生成的卷目录。

2. 调整资源限制

XWiki LTS运行需要足够内存,建议将内存限制调整到2048m或更高,同时设置资源预留:

deploy:
  resources:
    limits:
      cpus: '1.00'
      memory: 2048m
    reservations:
      cpus: '0.50'
      memory: 1024m

3. 检查文件权限

如果保留本地卷,确保本地./xwiki目录的权限符合容器运行用户要求:

chown -R 1000:1000 ./xwiki

(容器内XWiki运行用户的UID/GID通常为1000,可通过docker exec -it <容器ID> id确认)

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:25:14