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

Docker环境下Jenkins备份恢复失败:config.xml读取报错

Docker中Jenkins备份恢复报错处理

操作过程

尝试备份Docker容器内的Jenkins,通过备份插件完成备份后,用以下命令将备份文件复制到宿主机:

docker cp 2620d31f3b67:/Users/sidharth/jenkins_vol.zip .

解压备份文件后,执行挂载命令启动Jenkins:

docker run -v ./jenkins_vol:/var/jenkins_home -p 8080:8080 jenkins/jenkins:lts

报错信息

启动后出现如下错误:

sidharth@Sidharths-MacBook-Air ~ % docker run -v /Users/sidharth/jenkins_vol:/var/jenkins_home -p 8080:8080 jenkins/jenkins:lts
运行路径: /usr/share/jenkins/jenkins.war
webroot: EnvVars.masterEnvVars.get("JENKINS_HOME")
2023-02-25 08:07:32.364+0000 [id=1] INFO    org.eclipse.jetty.util.log.Log#initialized: 日志初始化完成 @325ms,使用org.eclipse.jetty.util.log.JavaUtilLog
2023-02-25 08:07:32.402+0000 [id=1] INFO    winstone.Logger#logInternal: 开始从war文件提取内容
2023-02-25 08:07:57.594+0000 [id=1] WARNING o.e.j.s.handler.ContextHandler#setContextPath: 空ContextPath
2023-02-25 08:07:57.637+0000 [id=1] INFO    org.eclipse.jetty.server.Server#doStart: jetty-9.4.45.v20220203; 构建时间: 2022-02-03T09:14:34.105Z; git: 4a0c91c0be53805e3fcffdcdcc9587d5301863db; jvm 11.0.16+8
2023-02-25 08:07:58.367+0000 [id=1] INFO    o.e.j.w.StandardDescriptorProcessor#visitServlet: / 路径无JSP支持,未找到org.eclipse.jetty.jsp.JettyJspServlet
2023-02-25 08:07:58.463+0000 [id=1] INFO    o.e.j.s.s.DefaultSessionIdManager#doStart: DefaultSessionIdManager workerName=node0
2023-02-25 08:07:58.463+0000 [id=1] INFO    o.e.j.s.s.DefaultSessionIdManager#doStart: 未设置SessionScavenger,使用默认配置
2023-02-25 08:07:58.464+0000 [id=1] INFO    o.e.j.server.session.HouseKeeper#startScavenging: node0 每660000ms清理一次会话
2023-02-25 08:07:59.989+0000 [id=1] INFO    hudson.WebAppMain#contextInitialized: Jenkins主目录: /var/jenkins_home,来自: EnvVars.masterEnvVars.get("JENKINS_HOME")
2023-02-25 08:08:00.453+0000 [id=1] INFO    o.e.j.s.handler.ContextHandler#doStart: 已启动 w.@73a19967{Jenkins v2.346.3,/,file:///var/jenkins_home/war/,AVAILABLE}{/var/jenkins_home/war}
2023-02-25 08:08:00.469+0000 [id=1] INFO    o.e.j.server.AbstractConnector#doStart: 已启动 ServerConnector@39a8312f{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
2023-02-25 08:08:00.469+0000 [id=1] INFO    org.eclipse.jetty.server.Server#doStart: 启动完成 @28440ms
2023-02-25 08:08:00.470+0000 [id=24]    INFO    winstone.Logger#logInternal: Winstone Servlet引擎运行中: controlPort=disabled
2023-02-25 08:08:01.436+0000 [id=30]    INFO    jenkins.InitReactorRunner$1#onAttained: 初始化已启动
2023-02-25 08:08:01.555+0000 [id=32]    INFO    jenkins.InitReactorRunner$1#onAttained: 已列出所有插件
2023-02-25 08:08:04.001+0000 [id=35]    INFO    jenkins.InitReactorRunner$1#onAttained: 已准备好所有插件
2023-02-25 08:08:04.014+0000 [id=30]    INFO    jenkins.InitReactorRunner$1#onAttained: 已启动所有插件
2023-02-25 08:08:04.041+0000 [id=31]    INFO    jenkins.InitReactorRunner$1#onAttained: 已扩展所有扩展项
2023-02-25 08:08:04.223+0000 [id=34]    SEVERE  jenkins.InitReactorRunner$1#onTaskFailed: 加载全局配置失败
com.thoughtworks.xstream.mapper.CannotResolveClassException: hudson.security.GlobalMatrixAuthorizationStrategy
    at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:81)
    at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
    at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55)
    at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
    at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)
    at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
    at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79)
    at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
    at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74)
    at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
    at com.thoughtworks.xstream.mapper.SecurityMapper.realClass(SecurityMapper.java:71)
    at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
    at hudson.util.XStream2$CompatibilityMapper.realClass(XStream2.java:411)
    at hudson.util.xstream.MapperDelegate.realClass(MapperDelegate.java:46)
    at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
    at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:47)
    at hudson.util.RobustReflectionConverter.determineType(RobustReflectionConverter.java:521)
    at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:346)
导致: jenkins.util.xstream.CriticalXStreamException: 
---- 调试信息 ----
cause-exception     : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message       : hudson.security.GlobalMatrixAuthorizationStrategy
class               : hudson.model.Hudson
required-type       : hudson.model.Hudson
converter-type      : hudson.util.RobustReflectionConverter
path                : /hudson/authorizationStrategy
line number         : 10
version             : 不可用
-------------------------------
    at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:381)
    at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:289)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:74)
    at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:72)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:68)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:52)
    at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:136)
    at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
    at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1421)
    at hudson.util.XStream2.unmarshal(XStream2.java:189)
    at hudson.util.XStream2.unmarshal(XStream2.java:160)
    at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1399)
    at hudson.XmlFile.unmarshal(XmlFile.java:196)
导致: java.io.IOException: 无法读取 /var/jenkins_home/config.xml

错误原因

核心错误是hudson.security.GlobalMatrixAuthorizationStrategy类无法被解析,说明原Jenkins实例安装了矩阵授权策略插件(Matrix Authorization Strategy Plugin),但新启动的Jenkins LTS容器中缺少该插件,导致Jenkins读取全局配置文件config.xml时失败。

解决方法

方法一:先安装缺失插件再挂载备份目录

  1. 临时启动一个干净的Jenkins容器,不挂载备份目录:
docker run -p 8080:8080 jenkins/jenkins:lts
  1. 完成Jenkins初始化流程,进入插件管理页面,搜索并安装Matrix Authorization Strategy Plugin
  2. 停止并删除这个临时容器:
docker stop <临时容器ID>
docker rm <临时容器ID>
  1. 重新挂载备份目录启动Jenkins:
docker run -v /Users/sidharth/jenkins_vol:/var/jenkins_home -p 8080:8080 jenkins/jenkins:lts

方法二:修改配置文件临时替换授权策略

  1. 打开备份目录下的config.xml文件
  2. 找到<authorizationStrategy>节点,将原内容替换为默认的授权策略配置:
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
  <denyAnonymousReadAccess>true</denyAnonymousReadAccess>
</authorizationStrategy>
  1. 保存文件后重新启动Jenkins容器,启动成功后进入插件管理页面安装Matrix Authorization Strategy Plugin,之后再恢复原来的授权配置

注意事项

  • 备份恢复时尽量保持新旧Jenkins版本一致,避免插件兼容性问题
  • 使用备份插件时,确保备份包包含所有依赖插件的数据,或提前确认并安装好所需插件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:10:04