背景
我的Jenkins是直接用docker启动的,但是在Jenkins构建流水线的时候,需要使用到docker环境,因为容器内都是最基本的linux环境,要在容器内再弄一个docker环境就很麻烦,所以想办法直接共享宿主机的docker环境
操作
启动镜像
docker run -d --name jenkins_kane2 \
-v jenkins_jdk17:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /etc/docker/daemon.json:/etc/docker/daemon.json \
-p 80:80 -p 443:443 \
-p 8080:8080 -p 50000:50000 \
jenkins/jenkins:lts-jdk17
和普通的启动其实只是加了
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /etc/docker/daemon.json:/etc/docker/daemon.json \
就是把宿主机的docker文件映射进Jenkins容器里面
检查是否启动成功
docker ps

进入Jenkins容器,配置用户组
宿主机情况(参考用,熟悉用户组的可以跳过此段)
先在宿主机输入命令
ls -l /var/run/docker.sock
这个结果的信息可以理解为,/var/run/docker.sock这个文件是属于docker和root用户组的
检查docker的用户组有啥用户
getent group docker
![]()
其他的可以忽略,可以看到kane用户是在docker用户组里的,所以我宿主机可以用kane用户去使用docker命令
Jenkins容器配置用户组
按上面宿主机的情况,我们就明白,我们只要把Jenkins里的容器里面的用户也加入到docker用户组里面就可以使用docker命令
操作
普通用户进入Jenkins容器,查看用户组情况
进入Jenkins容器,935e9371b59e 是容器id,进入到容器后,你会发现你的用户为jenkins
docker exec -it 935e9371b59e bash
![]()
先查看docker.sock文件的所属用户
ls -l /var/run/docker.sock
返回信息
jenkins@935e9371b59e:/$ ls -l /var/run/docker.sock
srw-rw---- 1 root 988 0 Nov 7 06:58 /var/run/docker.sock
可以看到没有docker用户组,其实这个988就是docker用户组,因为容器内没有docker这个用户组,所以就直接显示docker用户组的id 988
输入exit,点击回车,退出容器
root用户进入Jenkins容器,配置用户组
进入容器
docker exec -it -u root 935e9371b59e bash
创建docker用户组
groupadd -g 988 docker
把jenkins用户加入到docker用户组里
gpasswd -a jenkins docker
输入exit,点击回车,退出容器
重新启动Jenkins容器
docker restart 935e9371b59e
这时候重新进入Jenkins容器,就可以看到,Jenkins用户已经在docker用户组了

测试
这时候Jenkins容器内docker命令已经可以正常使用,随便使用个命令试试
docker ps

问题解决
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/DGH2430284817/article/details/170246998



