首页 文章

尝试在Mac上的Jenkins中构建docker镜像时出现“Permission Denied”错误

提问于
浏览
1

我在MacOS-HighSierra上使用Jenkins版本2.121.1和Pipeline .

我有一个名为build_docker_image.sh的shell脚本,它使用以下命令构建一个docker镜像:

docker build -t test_api:1 -f test-dockerfile

test-dockerfile是一个Dockerfile,包含构建映像的说明 .

从CLI整个设置工作!但是,当我从Jenkins服务器管道上下文运行它时,它在上面的行失败并出现错误:

尝试在unix上连接到Docker守护程序套接字时获得权限被拒绝:///var/run/docker.sock:发布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&标签=%7B%7D&存储器= 0&memswap = 0&网络模式=默认&RM = 1&会话= 2fab4ca31a7ca7b7eceddf80e02de5a7089dc10f50db250d2249e059d7ecfb61&shmsize = 0&T = login_api%3A100_i&目标=&ulimits =空:拨打unix /var/run/docker.sock:connect:权限被拒绝

从Jenkins服务器触发的步骤很简单 . 只需调用脚本:

stage ('Build-Docker-Image') {
    steps {
        sh '/path/to/build-docker_image.sh'
    }
 }

我确保Jenkins用户具有“admin”权限和“staff”组成员 . 我在shell脚本中打印出来,如下所示:

WHOAMI jenkins ID = uid = 267(jenkins)gid = 267(jenkins)egid = 1(守护进程)群= 267(jenkins),12(每个人),20(职员),61(localaccounts),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

    我知道了:

    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)
    

    我没有看到该列表中的组码头:

    sudo usermod -a -G docker jenkins
    

    重启Jenkins并查看问题是否仍然存在 .

    另外,我总是使用mesosphere/dcos-jenkins-dind-agent/Dockerfile.alpine作为Jenkins代理,因为我的构建涉及docker,正是因为我不想共享主要主机 /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
    }
    

相关问题