小白的码BUG之路头像

docker -- Jenkins容器内使用宿主机的docker环境

背景

        我的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

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--