jenkins工作的壳和bashdocker工人容器的不同的小组

我已经在Docker容器上安装了jenkins master,并在docker容器中使用Swarm插件运行一个slave。 我在docker slave中创build了一个组。 一旦我使用docker exec -it <container> bashinputslave容器并键入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