我想在Jenkins
上运行像这样的Docker
shell命令:
docker ps
是否可以不使用任何插件来完成?由于Jenkins不是一个用户,而是服务帐户,我如何将其添加到docker group
中?
首先执行
sudo groupadd docker
然后执行
sudo usermod -aG docker $USER
接着注销 注销很重要,因为这会重新评估您的组成员身份
重新登录并重试
docker ps
它有效!
sudo service docker restart
重新启动Docker。 - gliemezis以下方法适用于我在没有任何插件的情况下运行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
组与主机上的组ID不同的问题,这是一个非常好的解决方案。这样,在构建时就可以解决问题,而无需在基础镜像的入口脚本之前以root用户身份挂钩,然后再次切换用户并运行实际的入口脚本。 - DirkRUN echo "jenkins ALL=(ALL) NOPASSWD: docker" >> /etc/sudoers
这样做会给sudo docker权限,从而更好地模拟docker组,对吗? - JR Utily错误。如果我使用
docker exec bash登录到容器中,我可以正常访问docker。因此,我尝试将Entrypoint更改为
ENTRYPOINT ["/sbin/tini", "--", "bash", "-i", "/usr/local/bin/jenkins.sh"]`,但仍然不起作用 :/ - JR Utilyecho"alias docker ='sudo docker'" >> /etc/profile.d/00-aliases.sh
。 - Romain(摘自这个答案:https://askubuntu.com/a/477554)
如果你在Ubuntu上运行,而Jenkins直接在主机上运行(即不在Docker容器中):
如果docker组不存在,请添加它:
sudo groupadd docker
sudo gpasswd -a jenkins docker
重启 Docker 守护进程:
sudo service docker restart
要么执行newgrp docker
命令,要么退出/重新登录以激活组的更改。
jenkins
不是一个用户,而是服务账户。 - Rudziankoŭ我在运行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