Docker下的Jenkins执行docker agent导致Got permission denied 报错
我通过Vmware + Ubuntu + Docker + Jenkins部署了Jenkins环境,同时在Jenkins中新建了一个Pipeline任务,具体脚本如下:
这个脚本主要是执行一个python脚本,在pipeline中我使用了agent docker来部署python环境。
保存任务,执行(Build Now),结果在执行docker pull python:3.7.5时报错:"Got permission denied while trying to connect to the Docker deamon sockert at unix:///var/run/docker.sock:....."
如下图:
解决:
这个问题困扰了我半天,尝试了各种方法都行不通。而网上大部分是非Docker环境部署Jenkins的解决方案。
核心问题其实就是解决jenkins执行docker的权限问题。
先来解决docker的root权限问题(如果在部署Docker时已经完成此步,则可以直接跳过)
参考官方文档<Manage Docker as a non-root user>章节:https://docs.docker.com/engine/install/linux-postinstall/:
图中红圈部分,大致意思是Docker守护进程绑定的是一个Unix socket而不是TCP端口。默认情况下Unix socket属于rott,其他用户只能通过sudo使用。
文档后续附上了解决方案:创建一个docker用户组,并把user用户加进该用户组里。
解决步骤1:创建docker用户组,并把user用户加进该用户组(直接按官方文档顺序执行即可,如果已经新建用户组则跳过此步)
-
创建docker用户组.$ sudo groupadd docker
-
将当前用户加入到docker用户组.$ sudo usermod -aG docker $USER
-
激活更新用户组信息:$ newgrp docker
-
验证是否可在没有sudo命令的情况下执行docker命令y.$ docker run hello-world
经过以上步骤,问题仍未解决,在执行pipeline时出现同样报错。
解决步骤2:给docker.sock添加读写权限:
$ sudo chmod a+rw /var/run/docker.sock
经过以上步骤,任务成功执行,并输出Hello,World!