Ubuntu 上的 Docker Jenkins 中的 Docker - docker.sock 的权限问题

Ubuntu 上的 Docker Jenkins 中的 Docker - docker.sock 的权限问题

我正在尝试设置一个类似于中描述的方法的 Jenkins docker 镜像https://getintodevops.com/blog/the-simple-way-to-run-docker-in-docker-for-ci

我的 Dockerfile 如下所示:

FROM jenkins/jenkins:lts
USER root
RUN apt-get update && apt-get -y install sudo
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
RUN apt-get install -y apt-transport-https ca-certificates \ 
    curl gnupg2 software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
RUN add-apt-repository "deb [arch=amd64] \ 
    https://download.docker.com/linux/debian stretch stable"
RUN apt-get update
RUN apt-get install -y docker-ce docker-ce-cli containerd.io
RUN usermod -aG docker jenkins
USER jenkins

我正在像这样启动容器:

docker run -d -v jenkins_home:/var/jenkins_home \
    -p 8080:8080 -p 50000:50000 \
    -v /var/run/docker.sock:/var/run/docker.sock customjenkins

但是,当我运行构建(或执行到容器中并执行docker ps)时,我得到以下信息:

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.40/
containers/json: dial unix /var/run/docker.sock: connect: permission denied

我唯一能让它工作的方法就是使用chmod 777文件docker.sock,但我觉得这不对。我是否遗漏了其他步骤或可以遵循其他解决方案?

主机操作系统是 Ubuntu 19.04,Docker 版本 19.03.0-beta2,构建 c601560

答案1

您需要使用以下命令运行命令须藤

sudo docker run -d -v jenkins_home:/var/jenkins_home \
    -p 8080:8080 -p 50000:50000 \
    -v /var/run/docker.sock:/var/run/docker.sock customjenkins

否则,您没有权限读取/写入套接字,这是完全正常且意料之中的。使用chmod 777确实是一个坏主意,因为它会带来安全问题。


除了使用须藤另外还有两种建议使用docker的方法:

1.将您的用户添加到 docker 组:

sudo gpasswd -a $USER docker

注意:如果组码头工人不存在,你可以先创建:

sudo groupadd docker

2.使用 ACL 为您的用户添加使用 docker 套接字的权限:

sudo setfacl -m user:$USER:rw /var/run/docker.sock

$USER如果愿意,您可以用您的用户名替换。

相关内容