我是码头工人的新手。我只是试着在我的本地机器(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。

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

其他回答

我有Jenkins在Docker中运行,并连接Jenkins从主机Ubuntu 16.04通过卷到/var/run/docker.sock使用Docker套接字。

对我来说,解决方案是:

1) Jenkins的Docker容器内部(Docker exec - Jenkins bash on host machine)

usermod -a -G docker jenkins
chmod 664 /var/run/docker.sock
service jenkins restart (or systemctl restart jenkins.service)
su jenkins

2)主机上:

sudo service docker restart

664表示-对组中的所有者和用户进行读写(但不执行)。

如果使用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

我遇到过类似的问题,这是一个权限问题,这个问题的原因是Docker守护进程/服务器总是作为根用户运行,并希望您总是使用sudo来为Docker命令作序。

Docker守护进程绑定到Unix套接字而不是TCP端口。默认情况下,Unix套接字由root用户拥有,其他用户只能使用sudo访问它。

为了解决这个问题,以下是对我有效的方法:

首先,检查是否已经创建了docker组:

cat /etc/group

如果你在显示的列表中没有找到docker,那么你需要创建一个:

sudo groupadd docker

接下来,使用下面的命令确认您的用户和组:

cat /etc/group

滚动查看docker的组。应该是这样的格式

docker:x:140:promisepreston

docker是我的组,promisepreston是我的用户

现在我们可以将您的用户添加到docker组

将你的用户加入docker组,如果你想以非root用户的身份使用docker:

在你的终端上复制并运行下面的命令,而不需要以任何方式修改它,不管你想要运行或试图运行的docker image/container/命令是什么,或者是导致权限问题的:

sudo usermod -aG docker $USER

运行上面的命令后,您将需要注销并重新登录,以便重新评估您的组成员资格。然而,在Linux上,你也可以运行下面的命令来激活对组的更改(在你的终端上复制并运行下面的命令,而不以任何方式修改它,不管你想要运行或试图运行或导致权限问题的docker image/container/命令):

newgrp docker

OR

sudo systemctl restart docker

您现在可以验证您可以在没有sudo权限的情况下运行docker命令,通过再次运行导致权限问题的命令,例如(将my-command替换为您的image/container/命令的名称):

docker run my-command

对于Docker和Local文件系统文件:

如果你在本地文件系统上有一份文件的副本,那么你可以使用以下格式更改应用程序文件存储的应用程序目录的所有权:

sudo​​ ​ chown​​ ​ your_user:your_group​​ ​ -R​​ my-app-directory/

所以在我的例子中,它将是:

sudo chown promisepreston:docker -R my-app-directory/

注意:请在应用程序目录所在的父目录中运行此命令。

这是所有。

我希望这对你们有帮助

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

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

我试着执行了几次命令

Sudo chmod 777 /var/run/docker.sock

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

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