我是码头工人的新手。我只是试着在我的本地机器(Ubuntu 16.04)上使用docker和Jenkins。

我用下面的管道脚本配置了一个新作业。

node {
    stage('Build') {
      docker.image('maven:3.3.3').inside {
        sh 'mvn --version'
      }
    }
}

但是它失败了,错误如下:

在unix:///var/run/ Docker .sock试图连接到Docker守护进程套接字时被拒绝


当前回答

我将jenkins用户添加到根组,并重新启动jenkins,它开始工作。

sudo usermod -a -G root jenkins
sudo service jenkins restart

其他回答

这在Ubuntu 20.04中适用

sudo chmod 666 /var/run/docker.sock

不知道它到底能做什么,但能解决问题。

如果你可能会得到如下错误,

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

or

level=error msg="failed to dial gRPC: cannot connect to the Docker daemon. Is 'docker daemon' running on this host?: dial unix /var/run/docker.sock: connect: permission denied"

试着执行下面的命令,

$ sudo su - jenkins
$ sudo usermod -a -G docker $USER
$ sudo chown jenkins:docker /var/run/docker.sock

检查docker是否正在运行 Sudo systemctl status docker

检查错误 Docker ps a

准许 sudo usermod -aG docker ${USER} 下一个命令 su - ${USER}

如果出现错误,请再次检查 Docker ps a

我的成功

sudo usermod -a -G docker $USER
reboot

我使用的是官方的jenkins docker映像(https://hub.docker.com/r/jenkins/jenkins),但我认为这个解决方案适用于我们想要在docker容器中运行docker的大多数用例。

在Docker容器中使用Docker的推荐方法是使用主机系统的Docker守护进程。这方面的好文章:https://itnext.io/docker-in-docker-521958d34efd。

处理权限问题的秘诀是在容器内为容器的用户添加权限,而不是为主机系统添加权限。默认情况下只有root用户有权限这样做,所以

docker exec -it -u root <container-name> bash
usermod -a -G docker <username>

我会做的。记得重新启动容器。

我想最简单的方法是创建一个定制的Dockerfile:

# Official jenkins image
FROM jenkins/jenkins:lts
# Swith to root to be able to install Docker and modify permissions
USER root
RUN apt-get update
# Install docker
RUN curl -sSL https://get.docker.com/ | sh
# Add jenkins user to docker group
RUN usermod -a -G docker jenkins
# Switch back to default user
USER jenkins

# Bild the image:
# sudo docker build -t yourusername/imagename .
# Run the image and mount with the followin bind mount option:
# sudo docker run --name imagename -d -p8080:8080 -v /var/run/docker.sock:/var/run/docker.sock yourusername/imagename