尝试在Mac上的Jenkins中构建docker映像时出现“权限被拒绝”错误

时间:2018-07-05 23:03:15

标签: docker jenkins

我在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几次。它没有帮助。

1 个答案:

答案 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
}