我是码头工人的新手。我只是试着在我的本地机器(Ubuntu 16.04)上使用docker和Jenkins。
我用下面的管道脚本配置了一个新作业。
node {
stage('Build') {
docker.image('maven:3.3.3').inside {
sh 'mvn --version'
}
}
}
但是它失败了,错误如下:
在unix:///var/run/ Docker .sock试图连接到Docker守护进程套接字时被拒绝
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
希望这能有所帮助
我在码头集装箱里查詹金斯。对我来说,最简单的解决方案是创建一个动态设置GID的自定义映像,例如:
FROM jenkins/jenkins:lts
...
CMD DOCKER_GID=$(stat -c '%g' /var/run/docker.sock) && \
groupadd -for -g ${DOCKER_GID} docker && \
usermod -aG docker jenkins && \
sudo -E -H -u jenkins bash -c /usr/local/bin/jenkins.sh
参见:https://github.com/jenkinsci/docker/issues/263
或者你可以使用以下选项启动jenkins:
-v /var/run/docker.sock:/var/run/docker.sock \
-u jenkins:$(getent group docker | cut -d: -f3)
这假设你的jenkins映像已经安装了docker客户端。参见:https://getintodevops.com/blog/the-simple-way-to-run-docker-in-docker-for-ci
如果使用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