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

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

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

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

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


当前回答

方法01:—更安全的方法

sudo usermod -aG docker ${USER}

若要应用新的组成员资格,请从服务器注销并返回,或键入以下内容:

su - ${USER}

系统将提示您输入用户密码继续。 确认您的用户现在已添加到docker组,输入以下命令:

id -nG

方法02:-不建议用于公共部署(不安全)

chmod 777 /var/run/docker.sock

或使用

sudo chown root:docker /var/run/docker.sock

其他回答

在我的例子中,不仅需要将jenkins用户添加到docker组,而且需要将该组作为jenkins用户的主组。

# usermod -g docker jenkins
# usermod -a -G jenkins jenkins

不要忘记重新连接jenkins从节点或重新启动jenkins服务器,这取决于您的情况。

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

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

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

2018-08-19

我已经被这个问题困了好几天了,因为我还没有找到一个完整的答案,关于为什么和如何,我将为其他偶然发现同样问题的人发布一个答案,上面的答案不起作用。

以下是在docker中运行Jenkins时的3个关键步骤:

You mount the socket /var/run/docker.sock to the jenkins container in order to be able to use the docker from the host. You have to install docker inside the container in order to use it. This is a great and simple article on how to do that. Note that newer versions might already have docker installed You run sudo usermod -a -G docker jenkins in order to add jenkins to the docker group. However, here you might run into a permission problem if the host docker and the container docker don't have the same group id so it is very important to adjust the container docker's gid to be the same as the host docker gid

您可以将此作为启动脚本的一部分,也可以使用exec并手动执行:groupmod -g <YOUR_HOST_DOCKER_GID> docker。

另外,不要更改/var/run/docker的权限。Sock到777或类似的东西,因为这是一个很大的安全风险,你基本上允许每个人在你的机器上使用docker

希望这能有所帮助

2019-02-16

对我来说,大多数步骤都和其他人写的一样。 然而,我无法使用usermod和上述解决方案将jenkins添加到组docker中。

我从docker主机和运行中的docker容器中尝试了以下命令:

sudo usermod -a -G docker jenkins

(我从docker主机输入以下命令进入正在运行的docker容器:

docker exec -t -i my_container_id_or_name /bin/bash

)

从docker主机收到:

Usermod:用户jenkins不存在

从docker容器收到:

我们相信你已经接受了当地体制的常规教育 管理员。通常可以归结为以下三点: 1)尊重他人的隐私。 #2)三思而后行。 #3)能力越大,责任越大。 [sudo] jenkins密码:

我不知道密码。

没有sudo部分的命令,在docker容器中我收到:

usermod:拒绝权限。Usermod:无法锁定/etc/passwd;试一试 稍后再。

解决方案: 我从docker主机输入以下命令进入正在运行的docker容器:

docker exec -t -i -u root my_container_id_or_name /bin/bash

现在,我以root身份输入,并发出以下命令:

usermod -a -G docker jenkins

然后,从docker主机,我重新启动我的运行docker容器与以下命令:

docker restart my_container_id_or_name

在那之后,我开始了jenkins的工作,它成功地完成了。

我只使用根用户为用户jenkins发出usermod命令。