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代理时,它才会有某种权限问题。
我花了这么多时间在这上面,有人有主意吗?
1条答案
按热度按时间o2gm4chl1#
这是因为Jenkins将
-u jenkins
或您运行jenkins worker的用户ID传递给docker容器,因此您在docker容器中以Jenkins用户的身份运行Jenkins用户权限。然而(你完全忽略了你的“dind”镜像)你正在从主机挂载docker,容器内的Jenkins用户很可能是没有任何组的未知用户,所以它没有访问docker.sock的权限。