Jenkins在linux系统里面权限的问题
出现这个问题的原因分析:jenkins没有执行shell脚本的权限??或者jenkins没有那个目录的操作权限??
但是对课程第7周5章的jenkins的docker-compose.yml中的user配置的意义不太清楚
这里的这个user:jenkins是需要我在linux系统新建一个Jenkins的用户,还是说,docker在容器内部生成一个Jenkins的用户?
目前尝试了在宿主机里面运行了 sudo usermod -a -G docker jenkins 这句命令,但是没有解决问题。。
在宿主机上运行cat /etc/group命令输出的截图如下:请问docker:x:994:jenkins 994后面的Jenkins和最下行的Jenkins是一个用户吗?同时问了好几个问题,麻烦老师或者老手同学帮忙都解答一下,谢谢
正在回答
出现这个问题的原因分析:jenkins没有执行shell脚本的权限??或者jenkins没有那个目录的操作权限??
——你的问题提示的非常清楚了,就是没有docker这个进程的执行权限。
但是对课程第7周5章的jenkins的docker-compose.yml中的user配置的意义不太清楚
这里的这个user:jenkins是需要我在linux系统新建一个Jenkins的用户,还是说,docker在容器内部生成一个Jenkins的用户?
——这里我们把docker映射到了jenkins中,但是在容器中的用户是jenkins,所以我们要给jenkins一个操作docker的权限。
cat /etc/group命令对应的解释:
由冒号(:)隔开若干个字段,这些字段有:
组名:口令:组标识号:组内用户列表
"组名"是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
"口令"字段存放的是用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*。
"组标识号"与用户标识号类似,也是一个整数,被系统内部用来标识组。
"组内用户列表"是属于这个组的所有用户的列表/b],不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
这里,我们使用 user: jenkins: 994 其实就是告诉docker,使用994这个组的权限来运行jenkins,那么jenkins自然就有了操作docker权限。
那么这个994从哪里来,又为什么映射到了docker的操作权限?
cat /etc/group | grep docker就是去看看宿主机上的docker的组是哪个,994就是gid。
第二个问题,如何进行映射?https://docs.docker.com/engine/reference/run/#user
这里写的非常清楚:
-u="", --user="": Sets the username or UID used and optionally the groupname or GID for the specified command.
The followings examples are all valid:
--user=[ user | user:group | uid | uid:gid | user:gid | uid:group
那么,当我们得到docker是994这个组之后,直接进行映射,那么在docker-compose中的写法就是
user: jenkins:994
目前尝试了在宿主机里面运行了 sudo usermod -a -G docker jenkins 这句命令,但是没有解决问题。。
——有没有重新运行docker容器?重新创建?
docker-compose up --force-recreate -d
在宿主机上运行cat /etc/group命令输出的截图如下:请问docker:x:994:jenkins 994后面的Jenkins和最下行的Jenkins是一个用户吗?
——见上面的回答,group是组,后面是组标识号,如果组标识号一样,说明你在宿主机上,让jenkins与docker成为了同一个组,组内权限一样,但是宿主机上没有装jenkins啊?你添加jenkins有什么用?jenkins用户在docker容器中,容器与宿主机权限隔离,只能从宿主机把docker映射到jenkins中来使用,好好看看这一节: 5-1 Jenkins使用介绍&课程案例架构 https://class.imooc.com/lesson/1165#mid=28184
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星