首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找出哪个用户正在访问/var/run/docker.sock,这将导致权限拒绝错误

如何找出哪个用户正在访问/var/run/docker.sock,这将导致权限拒绝错误
EN

Stack Overflow用户
提问于 2020-07-24 14:13:09
回答 3查看 1K关注 0票数 2

这个问题不同于下列问题:

Docker:试图连接到unix://var/run/docker.sock上的Docker守护进程套接字时被拒绝的权限是因为他们不认为jenkins是作为码头容器安装的,这里我没有jenkins用户可以让用户访问这个文件。

也是从这个docker.sock权限被拒绝,因为我不知道我得到了这个错误的哪个用户,在这里,用户root可以访问这个文件,但是错误再次发生。

我的问题是:

我希望在ubuntu上使用以下命令运行jenkinsci/blueocean映像:

代码语言:javascript
复制
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之后,当我使用代理时,如下所示:

代码语言:javascript
复制
agent {
        docker {
            image 'maven:3-alpine'
        }
}

我发现了以下错误:

代码语言:javascript
复制
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

在这里,当我使用这个命令时,它将解决这个问题:

代码语言:javascript
复制
chmod 777 /var/run/docker.sock

但是,由于安全漏洞,我不想允许所有用户访问这个套接字。

我还应该说,当前用户是root用户,它可以访问/var/run/docker.sock

以下是一些有用的信息:

代码语言:javascript
复制
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,结果得到了这个错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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 rootid -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的组,并在这个组中添加根。

票数 3
EN

Stack Overflow用户

发布于 2020-07-24 15:07:11

根据Jenkins 下载和运行-jenkins-in-docker文档:

4.为了在Jenkins节点中执行Docker命令,下载并运行docker:dind

Docker in Docker(dind)允许Docker引擎作为容器在Docker内运行--这是一种直观的开始。

我只是复制了这些命令,并且工作得很好(我还在启动选项中包括了--privileged )。不确定是否是强制性的):

代码语言:javascript
复制
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这样的测试系统,并且希望该容器能够旋转更多的容器,那么请先阅读这个博客帖子。谢谢!

我个人使用它在我自己的操场从家里,在那里我经常做擦拭一切无论如何,我自己的风险。

票数 0
EN

Stack Overflow用户

发布于 2020-08-01 00:28:13

这个回购可能包含对您的问题的解决方案,我最近已经尝试过了,而且效果很好。不过,请记住,jenkinsci/blueocean映像已经过时,目前已被Jenkins所反对。

如果你更喜欢使用官方的jenkins/jenkins图像,利用docker.sock通信--你可以通过把你的问题发到Jenkins Docker封装和插件通道上找到解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63075375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档