jenkins工作的壳和bashdocker工人容器的不同的小组
我已经在Docker容器上安装了jenkins master,并在docker容器中使用Swarm插件运行一个slave。 我在docker slave中创build了一个组。 一旦我使用docker exec -it <container> bash
inputslave容器并键入groups
我创build的组被正确列出。
但是,当我将groups
键入工作描述shell并在创build的从属服务器上执行作业时,我的组不会显示。
编辑 :奴隶容器:简单地启动一个jenkins奴隶作为用户jenkins
。 启动时,通过CMD [ "/startup.sh" ]
执行以下代码(脚本:startup.sh)。 jenkins-slave.sh
提供在https://gist.github.com/sfrehse/02c7d57fad862c71c20f07c59caba240下。
DOCKER_SOCKET=/var/run/docker.sock DOCKER_GROUP=dockergrp JENKINS_USER=jenkins if [ -S ${DOCKER_SOCKET} ]; then DOCKER_GID=$(stat -c '%g' ${DOCKER_SOCKET}) sudo groupadd -for -g ${DOCKER_GID} ${DOCKER_GROUP} sudo usermod -aG ${DOCKER_GROUP} ${JENKINS_USER} fi /usr/local/bin/jenkins-slave.sh
从bash启动后: docker exec -it 8b85afe2b360 groups
输出jenkins dockergrp
。
触发包含以下代码的作业:
whoami groups docker ps
输出
jenkins jenkins Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30/containers/json: dial unix /var/run/docker.sock: connect: permission denied
第二行中缺less组dockergrp
。
总的来说,我无法访问docker守护进程没有sudo
和问题似乎是缺less的组。 运行命令docker exec -it <id> docker ps
输出我的运行容器成功。
添加组时存在已知问题,不会为已经login的用户重新加载。
尝试改变最后一行:
sudo su -l jenkins -c /usr/local/bin/jenkins-slave.sh
为了在新的jenkinslogin下启动脚本。
注意:你可以预先安装一个exec
指令,以便没有subprocess,所以只需要replace当前的进程:
exec sudo su -l jenkins -c /usr/local/bin/jenkins-slave.sh