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

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

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

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

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


当前回答

sudo setfacl——modify user:(用户名或ID):rw /var/run/docker.sock

我试着执行了几次命令

Sudo chmod 777 /var/run/docker.sock

但不幸的是,我每次登录ubuntu系统时都要这么做。 它不需要重新启动,比usermod或chown更安全。 如果用户名只存在于容器内,而不存在于主机上,则需要输入user ID。

我希望它能帮助你解决这个问题。

其他回答

除了将用户添加到docker组并尝试本线程中提到的所有方法之外,我花了一段时间才意识到我必须重新启动我的终端,然后重新登录到ec2实例。从那以后,它起作用了。

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

如果使用jenkins

用户jenkins需要添加到docker组中:

sudo usermod -a -G docker jenkins

然后重启詹金斯。

否则

如果你收到来自docker的消息而遇到堆栈溢出的问题,但你没有使用jenkins,那么错误很可能是一样的:你的非特权用户不属于docker组。

你可以:

sudo usermod -a -G docker [user]

在[user]所在的位置插入用户名。

你可以通过执行grep docker /etc/group命令来检查它是否成功,如下所示:

docker:x:998:[user]

在其中一行。

然后将您的用户组ID更改为docker(以避免不得不退出并再次登录):

newgrp docker

似乎没有人提到,根据官方来源:https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user -你可以用sudo“pre”你的命令,它将在不创建用户或其他操作的情况下工作。例如sudo docker拉mongo -这是有效的。

我使用以下命令修复了这个问题:

sudo chmod 777 /var/run/docker.sock
sudo chown ${USER}:docker /var/run/docker.sock