我正在尝试设置一个类似于中描述的方法的 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
如果愿意,您可以用您的用户名替换。