为什么我在Jenkins中得到'permission denied'错误,但在bash-ing到DIND图像时没有?

xyhw6mcr  于 2023-06-05  发布在  Jenkins
关注(0)|答案(1)|浏览(510)

Jenkins和Docker
你好,我已经在我的主计算机上使用Docker桌面安装了Jenkins,并使用了推荐的当前Jenkins镜像。在同一台Windows计算机上,我用vmware创建了一个Ubuntu VM。在ubuntu虚拟机上,我安装了docker引擎。我还安装了sysbox-runc runtime来使用dind。在jenkins中,我添加了ubuntu vm有一个永久代理,除了docker客户端命令外,一切都正常。
我的JenkinsFile看起来像这样

pipeline {
agent { docker {
    image 'costum dind image with java and maven'
    registryCredentialsId 'credential'
    args '-v /var/run/docker.sock:/var/run/docker.sock'
 } }
stages {
    codecheckout
    ...
    stage('compile') {
        steps {
            sh 'mvn compile'
        }
    }

    stage('test') {
        steps {
            sh 'mvn test'
        }
    }

    stage('build jar') {
        steps {
            sh 'mvn clean compile assembly:single'
        }
    }

    stage('docker build') {
        steps {
            sh 'docker build -t img/img .'
        }
    }
}

}
除了最后一个sh 'docker build -t img/img .'它说ERROR:在unix:///var/run/docker.sock中尝试连接Docker守护进程套接字时,权限被拒绝:获取“http://%2Fvar%2Frun%2Fdocker.sock/_ping”:拨打unix /var/run/docker.sock:连接:权限被拒绝
我的jenkins通过启动方法“Launch agents via SSH”在ubuntu上启动代理。
我在docker组中添加了jenkins用来启动代理的ssh用户。它仍然会出错。到目前为止,它唯一的工作方式是如果我作弊,把777烫发的docker. sock。
奇怪的是,当使用ubuntu终端时,我运行一个dind镜像并继续运行,我没有任何错误,所有的docker命令都可以工作。只有当jenkins使用docker代理时,它才会有某种权限问题。
我花了这么多时间在这上面,有人有主意吗?

o2gm4chl

o2gm4chl1#

这是因为Jenkins将-u jenkins或您运行jenkins worker的用户ID传递给docker容器,因此您在docker容器中以Jenkins用户的身份运行Jenkins用户权限。然而(你完全忽略了你的“dind”镜像)你正在从主机挂载docker,容器内的Jenkins用户很可能是没有任何组的未知用户,所以它没有访问docker.sock的权限。

相关问题