这个问题不同于下列问题:
Docker:试图连接到unix://var/run/docker.sock上的Docker守护进程套接字时被拒绝的权限是因为他们不认为jenkins是作为码头容器安装的,这里我没有jenkins用户可以让用户访问这个文件。
也是从这个docker.sock权限被拒绝,因为我不知道我得到了这个错误的哪个用户,在这里,用户root可以访问这个文件,但是错误再次发生。
我的问题是:
我希望在ubuntu上使用以下命令运行jenkinsci/blueocean映像:
docker container run \
--name jenkins-blueocean \
--rm \
--detach \
--publish 8181:8080 \
--publish 50000:50000 \
--volume jenkins-data:/var/jenkins_home \
--volume jenkins-docker-certs:/certs/client:ro \
--volume /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean在dokcer容器上运行jenkins之后,当我使用代理时,如下所示:
agent {
docker {
image 'maven:3-alpine'
}
}我发现了以下错误:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/create?fromImage=maven&tag=3-alpine: dial unix /var/run/docker.sock: connect: permission denied在这里,当我使用这个命令时,它将解决这个问题:
chmod 777 /var/run/docker.sock但是,由于安全漏洞,我不想允许所有用户访问这个套接字。
我还应该说,当前用户是root用户,它可以访问/var/run/docker.sock。
以下是一些有用的信息:
echo $USER
root
ls -ls /var/run/docker.sock
srw-rw---- 1 root docker 0 Jul 24 14:56 /var/run/docker.sock
groups
root docker我应该允许哪个用户访问这个文件?jenkins是在容器上运行的,在我的系统中没有jenkins用户,我如何才能知道哪个用户试图访问这个套接字文件/var/run/docker.sock,结果得到了这个错误?
发布于 2020-07-31 03:46:48
如果您查看jenkinsci/蓝海的Dockerfile,例如1.23.2。您可以看到"jenkins“用户是uid 1000和gid 1000。必须与卷访问匹配的是这些ID,而不是用户名。
与其在主机上授予uid/gid 1000对/var/ run /docker.sock的访问权限,不如以具有权限的用户/组的身份运行容器。您可以使用id -u root和id -g docker来检查它,然后使用docker run命令,例如(假设根uid为0),docker run -u 0 ...。有关如何使用-u/--user的更多示例,请参见-u/--user。如果您在容器中以与root用户相同的uid运行,则可能不会出现问题,但如果是不同的id,则可能会遇到问题,因为其他uid可能缺少必要的配置,以便能够正确运行Jenkins内容。
如果您真的想改变/var/run/docker.sock的路线,那么答案是创建一个具有gid 1000的组,并在这个组中添加根。
发布于 2020-07-24 15:07:11
根据Jenkins 下载和运行-jenkins-in-docker文档:
4.为了在Jenkins节点中执行Docker命令,下载并运行docker:dind
Docker in Docker(dind)允许Docker引擎作为容器在Docker内运行--这是一种直观的开始。
我只是复制了这些命令,并且工作得很好(我还在启动选项中包括了--privileged )。不确定是否是强制性的):
docker container prune -f;
docker container run --name jenkins-docker --detach --privileged --network jenkins --network-alias docker --env DOCKER_TLS_CERTDIR=/certs --volume jenkins-docker-certs:/certs/client --volume jenkins-data:/var/jenkins_home --publish 2376:2376 docker:dind;
docker container run --name jenkins-blueocean --rm --detach --privileged --network jenkins --env DOCKER_HOST=tcp://docker:2376 --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 --publish 8080:8080 --publish 50000:50000 --volume jenkins-data:/var/jenkins_home --volume jenkins-docker-certs:/certs/client:ro jenkinsci/blueocean
然而,,在dind回购 README.md的最顶端,您可以发现以下语句强烈地阻止了上面描述的设置(感谢@David指出了这一点):
如果您来这里是因为希望在容器中运行像Jenkins这样的测试系统,并且希望该容器能够旋转更多的容器,那么请先阅读这个博客帖子。谢谢!
我个人使用它在我自己的操场从家里,在那里我经常做擦拭一切无论如何,我自己的风险。
发布于 2020-08-01 00:28:13
这个回购可能包含对您的问题的解决方案,我最近已经尝试过了,而且效果很好。不过,请记住,jenkinsci/blueocean映像已经过时,目前已被Jenkins所反对。
如果你更喜欢使用官方的jenkins/jenkins图像,利用docker.sock通信--你可以通过把你的问题发到Jenkins Docker封装和插件通道上找到解决方案。
https://stackoverflow.com/questions/63075375
复制相似问题