背景:以docker容器的方式安装Jenkins服务器,运行结束可直接删除容器,不留垃圾,版本升级简单高效,是最快捷的部署方式(参照:docker容器化安装Jenkins)。遗憾的是,Jenkins官方镜像的内置用户为普通权限的jenkins账户,这在容器挂载本地目录、容器内安装应用、git配置gitlab代码库链接,以及使用Jenkins自动打包docker镜像时均会遇到权限问题。
分析:Jenkins容器中服务的权限太低,需要提升root权限。查找了网上各种资料,均提出通过修改/etc/sysconfig /jenkins文件的方式更改启动用户,经过实践后很遗憾的发现这种方式只对rpm包安装的Jenkins服务有效,Jenkins容器并没有相关配置。
解决:通过分析官方镜像dockerfile文件发现,启动用户是在镜像生成的时候内置的,并且英文网站一篇在Jenkins上运行docker的文章,也讲到通过定制镜像的方式解决Jenkins权限的问题。
定制过程如下:
1、新建 vi dockerfile文件,添加镜像定义。
内容如下:
#定义使用docker jenkinsci/blueocean:1.22.0为基础镜像
FROM jenkinsci/blueocean:1.22.0
#设置作者信息
MAINTAINER XXXXXX<kavin>
LABEL Description="This image is used to serve XXXX project" Version="1.0"
#设置Jenkins默认用户
USER root
2、运行docker build -t myjenkins:1.0 . -f dockerfile生成新的docker镜像。
3、执行docker-compose down -v停止原Jenkins容器。
4、修改docker-compose.yml文件,替换使用的镜像为新生成的镜像。
修改如下:
web:
#替换镜像文件jenkinsci/blueocean:1.22.0为myjenkins:1.0镜像
image: 'myjenkins:1.0'
privileged: true
user: root
restart: always
container_name: jenkins
hostname: '10.220.96.202'
ports:
- '8090:8080'
- '50000:50000'
volumes:
- '/data/jenkins/data:/var/jenkins_home'
- '/var/run/docker.sock:/var/run/docker.sock '
5、执行docker-compose up -d创建新Jenkins容器。
网友评论