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!
 
posted @ 2021-08-10 21:56  SunboyL  阅读(433)  评论(0编辑  收藏  举报