欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Docker run -v /var/run/docker.sock:/var/run/docker.sock 报错 拒绝权限

最编程 2024-03-25 22:25:59
...

今天在使用 Dozzle 给 docker 装日志服务

$ docker pull amir20/dozzle:latest
$ docker run --name dozzle -d --volume=/var/run/docker.sock:/var/run/docker.sock -p 8888:8080 amir20/dozzle:latest

结果报错

$ Could not connect to Docker Engine: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get \"http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&limit=0\": dial unix /var/run/docker.sock: connect: permission denied

网上找了半天解决方案:

方案一:使用sudo获取管理员权限,运行docker命令

方案二:将docker加入用户组

$ sudo groupadd docker     #添加docker用户组
$ sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
$ newgrp docker     #更新用户组
$ docker ps    #测试docker命令是否可以使用sudo正常使用

依然没有解决问题,还是报一样的错

后来在一篇博客上查到,Docker -v 对挂载的目录没有权限 Permission denied 的解决办法中找到答案

方案一:在运行时加 --privileged=true

$ docker run --name dozzle -d --volume=/var/run/docker.sock:/var/run/docker.sock --privileged=true -p 8888:8080 amir20/dozzle:latest

方案二:临时关闭selinux然后再打开

$ setenforce 0
$ docker run ...
$ setenforce 1

方案三:添加linux规则,把要挂载的目录添加到selinux白名单

更改安全性文本的格式如下

chcon [-R] [-t type] [-u user] [-r role] 文件或者目录 选顷不参数:

-R :该目录下的所有目录也同时修改;

-t :后面接安全性本文的类型字段,例如 httpd_sys_content_t ;

-u :后面接身份识别,例如 system_u;

-r :后面街觇色,例如 system_r

执行

$ chcon -Rt svirt_sandbox_file_t /var/run/docker.sock

出于安全考虑,建议将挂载的权限设为 : read-only

最后我使用

$ docker run --name dozzle -d --volume=/var/run/docker.sock:/var/run/docker.sock:ro --privileged=true -p 8888:8080 amir20/dozzle:latest

完美!