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

如何克隆保留旧工作区的Jenkins Docker容器及原有任务

核心原因

你docker commit出来的镜像不带原有Jenkins数据,是因为官方Jenkins镜像默认将/var/jenkins_home声明为匿名数据卷,docker commit不会采集数据卷内的任何文件,所以镜像里根本没存旧容器的任务、配置、工作区内容,启动自然是全新实例。

可行操作方案

你要做带全量数据的镜像推送到AWS ECR,按下面步骤操作即可,不需要单独拷贝workspace目录——Jenkins所有任务定义、插件、配置、用户数据、工作区全在/var/jenkins_home路径下,只拷workspace没用。

方案1:将全量数据打入镜像(适合推ECR的场景)

  1. 先从运行中的旧容器把完整的jenkins_home目录拷贝到宿主机备份:
docker cp 76df6fa99373:/var/jenkins_home ./jenkins_home_full
  1. 在备份目录同级新建Dockerfile,内容如下:
# 基础镜像替换成你旧容器实际使用的Jenkins版本,也可以直接用你之前commit的jenkins-dev作为基础镜像
FROM jenkins/jenkins:lts-jdk11
USER root
# 把备份的全量数据复制到镜像内的jenkins_home路径,同时修正属主权限
COPY --chown=jenkins:jenkins ./jenkins_home_full/ /var/jenkins_home/
# 清空原镜像默认的匿名卷声明,避免启动时自动挂载空卷覆盖数据
VOLUME []
USER jenkins
  1. 构建带数据的新镜像:
docker build -t jenkins-dev-full .
  1. 本地启动验证,确认所有任务、配置、历史工作区都存在即可:
docker run -d --name jenkins-test -p 8080:8080 -p 50000:50000 jenkins-dev-full

验证没问题就可以按常规流程打标签推送到ECR,镜像本身已经携带所有数据,新环境拉取启动不需要额外挂载目录就能直接用。

方案2:宿主机目录挂载(不适合推镜像场景,仅本地迁移可用)

如果你不需要把数据打进镜像,只是本地起新容器保留数据,就不用重新构建:

  1. 同样先执行上面的docker cp命令把旧容器的jenkins_home全量备份到宿主机
  2. 启动新容器时直接挂载备份目录即可:
docker run -d --name jenkins-dev -p 8080:8080 -p 50000:50000 -v ./jenkins_home_full:/var/jenkins_home jenkins/jenkins:你的实际版本号
注意事项
  • 不要只拷贝workspace目录:任务定义本身存在/var/jenkins_home/jobs路径下,插件、配置、用户权限也都在jenkins_home的其他子目录,单独拷workspace会丢失任务配置,根本跑不起来。
  • 注意文件权限:容器内Jenkins进程用uid为1000的jenkins用户运行,拷贝进镜像的文件必须属主匹配,不然启动会报权限拒绝,Dockerfile里的--chown=jenkins:jenkins参数就是解决这个问题的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:27:28