Docker下安装Jenkins(使用root账号运行容器)

艺帆风顺 发布于 2025-04-03 28 次阅读


Jenkins在项目中可以说是CI/DI必不可少的一个工具。关于Jenkins的安装,网上文章很多,但是错讹居多,有不少都没有经过验证。
本文结合网上文章、视频以及个人实操,希望可以作为一个满意的Docker安装Jenkins的文档。

一、版本选择

我们在安装容器时,很多时候都是采用的官方镜像,但是如果看网上的文章,在安装Jenkins时大多不是直接安装的官方推荐的。

1. 检索Jenkins的镜像

docker search jenkins


一般第一个就是官方镜像。
但是安装Jenkins时,大多不会安装这个版本,就连Jenkins官网都推荐安装的是其他版本,具体是什么呢?就是jenkinsci/blueocean。

docker search jenkinsci


通过上图OFFICIAL列的字段可以看出,我们检索的jenkinsci的容器,都不是官方版本的。

查看官网

官网地址:Docker安装Jenkins官网
官网推荐命令:

docker run 
-u root
--rm
-d
-p 8080:8080
-p 50000:50000
-v jenkins-data:/var/jenkins_home
-v /var/run/docker.sock:/var/run/docker.sock
jenkinsci/blueocean

我们看最后一行,官网使用的就是jenkinsci/blueocean版本。
最终,我们确定,我们使用的Jenkins版本是jenkinsci/blueocean。

二、安装

我们不采用官方的命令,我们采用最通用的命令。

docker run -u root --name jenkins-blueocean -d 
-p 8080:8080 -p 50000:50000
-v /usr/local/jenkins_home:/var/jenkins_home
-v /var/run/docker.sock:/var/run/docker.sock
--restart=always --privileged=true
jenkinsci/blueocean

命令解读:

-u root:以root用户创建容器容器,否则容易出现权限问题
–name :指定容器运行后的名字
-d:后台运行容器
-p:端口映射,宿主机:容器
-v:端口映射
–restart=always:跟随Docker自动重启,可以说是必须的
–privileged=true:让当前用户拥有root权限。

需要说明的是,–privileged=true,虽然是拥有了 root 权限,但并不一定是 root 用户身份。
-uroot ,指定了 root 用户身份,但并不是真正拥有 root 权限。
总结:

-uroot:是给了 root 用户身份,但并没有真正的 root 权限
–privileged:真正让当前用户有了 root 权限

这部分参考:docker run 命令详解
所以,我们给出的命令不但有-u root,也有–privileged=true,这就是更合理的。

三、错误示范

一般创建容器时,很少指定-u root命令,大多是使用–privileged=true。这在创建其他容器时一般是没问题的,但是创建Jenkins是有问题的

docker run --name jenkins -d 
> -p 8080:8080 -p 50000:50000
> --restart=always --privileged=true
> -v /usr/local/jenkins_home:/var/jenkins_home
> -v /var/run/docker.sock:/var/run/docker.sock
> jenkinsci/blueocean

我们采用以上命令创建一个名为jenkins的容器,然后查看容器情况:

docker ps


我们看到STATUS为Restarting。
查看容器日志:

docker logs -f --tail 300 jenkins


如果我们搜索错误日志:

touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission

给出的解释大体都是一样的:

docker与jenkin默认目录(/var/jenkins_home)的权限问题

具体说就是:

需要修改下目录权限, 因为当映射本地数据卷时,此时的用户权限是root,即/usr/local/docker/jenkins/ 权限为root,但是挂载卷到容器内部,此时jenkins的权限为为1000。

解决方案:

chown -R 1000:1000 /usr/local/docker/jenkins/

这个问题就是在创建Jenkins容器是没有加-u root参数导致的,切记!

四、登陆

浏览器上输入:

http://192.168.222.100:8080/

按道理说是访问http://localhost:8080就可以访问,但是我这里失败了,只好通过访问虚拟机路径访问。
以上地址是我们的虚拟机地址。

创建Jenkins后会自动创建admin用户和对应的密码,密码所在的位置上图已经给出,我们访问该文件即可得到密码:

cat /var/jenkins_home/secrets/initialAdminPassword

得到的密码是:

bc3427450e574797a48fec1866229a9b

也可以访问Jenkins运行日志查看该密码:

docker logs jenkins

上面的jenkins指的是创建的Jenkins的容器名称。

因为Jenkins是用Java编写的,上图就是启动一个java项目的日志。
我们通过上图可以看到密码,以及日志的提示中说,可以访问下面目录得到密码:

/var/jenkins_home/secrets/initialAdminPassword

这和页面上给的提示是一致的。
我们输入密码,点击继续即可登陆成功。

这真的是新手入门!!!
既然是新手入门,那我们就安装推荐的插件即可,这个其实就类似于安装软件时候的默认安装与自定义安装。


邮箱不可少。

保存并完成。

上图就是采用我们刚才创建的用户登陆的界面。
至此,我们通过Docker安装Jenkins已经完成。
唯一的缺憾就是,我们创建完容器后竟然不能使用localhost来访问。这个问题以后再解决。

版权声明:本文内容来自CSDN:北冥牧之,遵循CC 4.0 BY-SA版权协议上原文接及本声明。本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。原文链接:https://blog.csdn.net/qq_42971035/article/details/128585595如有涉及到侵权,请联系,将立即予以删除处理。在此特别鸣谢原作者的创作。此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。