在不使用sudo的情况下让Jenkins运行docker

12

我想在Jenkins上运行像这样的Docker shell命令:

docker ps

是否可以不使用任何插件来完成?由于Jenkins不是一个用户,而是服务帐户,我如何将其添加到docker group中?


3
从安全角度来看,给某人运行Docker的权限就像是赋予他们sudo或root访问权限。不要被认为能够运行Docker的用户是受限制的用户所欺骗。 - omajid
4个回答

19

首先执行

sudo groupadd docker

然后执行

sudo usermod -aG docker $USER

接着注销 注销很重要,因为这会重新评估您的组成员身份

重新登录并重试

docker ps

它有效!


2
这实际上就是解决方案。 - Martin K.
1
对我有用。CentOS 7 - Ed of the Mountain
3
这对我起作用,但我还必须使用sudo service docker restart重新启动Docker。 - gliemezis

5

以下方法适用于我在没有任何插件的情况下运行docker命令:

不是将jenkins用户添加到docker组中,而是允许jenkins用户运行无需提示密码的sudo命令,然后创建别名以避免在jenkins从属Dockerfile中使用sudo。 我需要在连接到主机上运行的守护程序的容器中安装docker客户端。


 ## allowing jenkins user to run sudo commands
RUN echo "jenkins ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
 ## avoid typing sudo in command line
RUN echo "alias docker='sudo docker '" >> /home/jenkins/.bashrc


如果我没有漏掉什么,那么当在Docker容器内运行Jenkins时,容器内的docker组与主机上的组ID不同的问题,这是一个非常好的解决方案。这样,在构建时就可以解决问题,而无需在基础镜像的入口脚本之前以root用户身份挂钩,然后再次切换用户并运行实际的入口脚本。 - Dirk
RUN echo "jenkins ALL=(ALL) NOPASSWD: docker" >> /etc/sudoers 这样做会给sudo docker权限,从而更好地模拟docker组,对吗? - JR Utily
对我来说不起作用,我从官方的jenkins/jenkins docker镜像(https://github.com/jenkinsci/docker)中获取的jenkins用户似乎在执行jenkins.sh之前没有加载.bashrc,所以我仍然会得到`/var/run/docker.sock: connect: permission denied错误。如果我使用docker exec bash登录到容器中,我可以正常访问docker。因此,我尝试将Entrypoint更改为ENTRYPOINT ["/sbin/tini", "--", "bash", "-i", "/usr/local/bin/jenkins.sh"]`,但仍然不起作用 :/ - JR Utily
Jenkins用户没有主目录。如果您想这样做,请定义一个全局别名 echo"alias docker ='sudo docker'" >> /etc/profile.d/00-aliases.sh - Romain

4

(摘自这个答案:https://askubuntu.com/a/477554

如果你在Ubuntu上运行,而Jenkins直接在主机上运行(即不在Docker容器中):

如果docker组不存在,请添加它:

sudo groupadd docker

将用户"jenkins"添加到docker组中:
sudo gpasswd -a jenkins docker

重启 Docker 守护进程:

sudo service docker restart

要么执行newgrp docker命令,要么退出/重新登录以激活组的更改。


似乎 jenkins 不是一个用户,而是服务账户。 - Rudziankoŭ
1
如果你要倡导这种方法,你也应该提到安全方面的影响。 - bearrito

2

我在运行Jenkins管道时遇到了问题。我将Jenkins用户添加到docker组,并重新启动了Docker引擎并重新启动机器。然而,我仍然收到相同的错误信息:dial unix /var/run/docker.sock: connect: permission denied

最后,我将jenkins添加到root组中,问题得到解决(Ubuntu 18.04)(Azure上的VM)。

sudo gpasswd -a jenkins root
sudo service docker restart

被接受的答案对我没有用,但这个有用。 - vishal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接