我在MacOS-HighSierra上使用带有管道的Jenkins版本2.121.1。
我有一个名为build_docker_image.sh的shell脚本,该脚本使用以下命令构建docker映像:
docker build -t test_api:1 -f test-dockerfile
test-dockerfile是一个Dockerfile,并具有建立映像的说明。
通过CLI进行整个设置!但是,当我从Jenkins服务器Pipeline上下文运行它时,它在上一行失败并出现错误:
尝试连接Docker守护程序时拒绝获得权限 套接字在unix:///var/run/docker.sock:Post http://%2Fvar%2Frun%2Fdocker.sock/v1.37/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=.dockerfile.14bce80e6f0b4b9d7b36&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&session=2fab4ca31a7ca7b7eceddf80e02de5a7089dc10f50db250d2249e059d7ecfb61&shmsize=0&t=login_api%3A100_i&target=&ulimits=null: 拨打unix /var/run/docker.sock:connect:权限被拒绝
从Jenkins服务器触发的步骤很简单。只需调用脚本即可:
stage ('Build-Docker-Image') {
steps {
sh '/path/to/build-docker_image.sh'
}
}
我确保Jenkins用户具有“管理员”权限和“工作人员”组的成员。我也在shell脚本中将它们打印出来,如下所示:
WHOAMI詹金斯ID = uid = 267(詹金斯)gid = 267(詹金斯) egid = 1(守护进程) 组= 267(詹金斯),12(所有人),20(员工),61(本地帐户),80(管理员),701(com.apple.sharepoint.group.1),33(_appstore),98(_lpadmin), 100(_lpoperator),204(_developer),250(_analyticsusers),395(com.apple.access_ftp),398(com.apple.access_screensharing),399(com.apple.access_ssh)
我遵循了此处提到的解决方法步骤:https://github.com/docker/for-mac/issues/799。我也已经在Mac上重启了Docker几次。它没有帮助。
答案 0 :(得分:0)
我知道:
id uid=267(jenkins) gid=267(jenkins) groups=267(jenkins),12(everyone),20(staff),61(localaccounts),80(admin),701(com.apple.sharepoint.group.1),33(_appstore),98(_lpadmin),100(_lpoperator),204(_developer)
在该列表中我没有看到组docker:
sudo usermod -a -G docker jenkins
重新启动Jenkins,看看问题是否仍然存在。
另外,在涉及docker的构建中,我始终使用mesosphere/dcos-jenkins-dind-agent/Dockerfile.alpine
作为Jenkins代理,正是因为我不想共享主要主机/var/run/docker.sock
如果我的构建执行docker system prune --force
,即使该命令仅用于本地构建docker工件,也会对我的主机映像/容器/卷产生破坏性影响。
在Mac上,线程“ No more ‘docker’ group”建议:
docker run ... --group-add staff
检查this example:
macdev() {
CMD=${2:-/bin/bash}
set_title "dev : $1"
local name=dev-$1
docker inspect $name > /dev/null 2>&1
if [ $? = 0 ]; then
docker attach $name
else
docker run -ti --restart=always \
-e PROJECT=$1 \
--net=host \
--name=$name \
-v $HOME/.vim:/home/ehazlett/.vim \
-v $HOME/.vimrc:/home/ehazlett/.vimrc \
-v $HOME/.bashrc:/home/ehazlett/.bashrc \
-v $HOME/.ssh/config:/home/ehazlett/.ssh/config \
-v ~/Sync:/home/ehazlett/Sync \
-v ~/.docker:/home/ehazlett/.docker \
-v /var/run/docker.sock:/var/run/docker.sock \
--group-add staff \
ehazlett/devbox $CMD
fi
}