我是码头工人的新手。我只是试着在我的本地机器(Ubuntu 16.04)上使用docker和Jenkins。
我用下面的管道脚本配置了一个新作业。
node {
stage('Build') {
docker.image('maven:3.3.3').inside {
sh 'mvn --version'
}
}
}
但是它失败了,错误如下:
在unix:///var/run/ Docker .sock试图连接到Docker守护进程套接字时被拒绝
我可以在不更改本地unix套接字/var/run/docker.sock上的权限的情况下使其工作。我需要做的是在构建代理节点上启用tcp连接,然后在Jenkins云配置中指定docker主机。
假设您正在使用aws映像,ssh到构建代理节点,并使用/etc/sysconfig/docker文件启用tcp端口
增加-H tcp://0.0.0.0:2376选项。
# Additional startup options for the Docker daemon, for example:
# OPTIONS="--ip-forward=true --iptables=true"
# By default we limit the number of open files per container
OPTIONS="-H tcp://0.0.0.0:2376 --default-ulimit nofile=1024:4096"
确保使用sudo service docker restart重新启动守护进程
最后,您需要告诉Jenkins使用云节点配置中配置的DOCKER_HOST环境变量默认使用tcp。注意,这不是Jenkins管道环境中的配置。
导航到Jenkins ->管理Jenkins ->管理云和节点->部分配置-> .
节点属性->环境变量
然后添加DOCKER_HOST环境变量。
注意:我通过ssh使用启动代理来实现这一工作。
方法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
我在码头集装箱里查詹金斯。对我来说,最简单的解决方案是创建一个动态设置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