非root无文本编辑器时如何修改Docker容器内文件重置Jenkins密码
Docker环境下无编辑器、无容器内root权限的Jenkins密码重置方案
不需要在容器内安装任何文本编辑器,也不需要容器内普通用户的root提权能力,以下三种方案任选其一即可:
方案1:直接操作宿主机挂载目录(最稳定,优先选)
- 执行命令停止运行中的Jenkins容器:
docker stop <你的Jenkins容器ID或名称> - 查询Jenkins容器的主目录挂载路径:
docker inspect <你的Jenkins容器ID或名称> | grep Source,找到映射容器内/var/jenkins_home的宿主机目录路径 - 进入该宿主机目录,找到
config.xml文件,用宿主机自带的任意文本编辑器打开 - 搜索配置项
<useSecurity>true</useSecurity>,将值从true修改为false后保存文件 - 执行命令重启Jenkins容器:
docker start <你的Jenkins容器ID或名称> - 此时访问Jenkins地址会跳过登录校验直接进入系统,进入「全局安全配置」页面重新开启安全认证,设置新的管理员账号密码,保存后重启容器即可正常使用。
方案2:用系统自带sed流编辑器修改(无需额外工具)
所有Linux基础环境默认自带sed流编辑器,不需要安装,也不需要进入容器交互终端操作:
- 先停止Jenkins容器:
docker stop <你的Jenkins容器ID或名称> - 启动容器后直接执行sed替换命令修改配置:
docker start <你的Jenkins容器ID或名称> && docker exec -u root <你的Jenkins容器ID或名称> sed -i 's/<useSecurity>true<\/useSecurity>/<useSecurity>false<\/useSecurity>/g' /var/jenkins_home/config.xml - 重启一次容器:
docker restart <你的Jenkins容器ID或名称> - 后续重设密码的操作和方案1一致。
方案3:宿主机修改配置后拷贝覆盖(完全不依赖容器内工具)
如果容器做了权限限制无法直接在内部执行修改命令,可以用docker cp的方式覆盖配置:
- 从运行中的容器把配置文件拷到宿主机当前目录:
docker cp <你的Jenkins容器ID或名称>:/var/jenkins_home/config.xml ./ - 在宿主机上编辑拷出的config.xml,同样将
<useSecurity>true</useSecurity>改为false保存 - 停止Jenkins容器:
docker stop <你的Jenkins容器ID或名称> - 把修改好的配置文件拷回容器覆盖原文件:
docker cp ./config.xml <你的Jenkins容器ID或名称>:/var/jenkins_home/config.xml - 重启容器后按方案1的步骤重设密码即可。
注意:配置修改期间建议限制Jenkins端口的公网访问,避免免登录状态下出现未授权访问风险,重设密码确认登录正常后再放开访问限制。
内容的提问来源于stack exchange,提问作者Autechre
相关产品推荐
相关产品推荐

