02 docker常见bug:(权限bug)
02 docker常见bug:(权限bug)
1.背景:
因为使用的是sudo安装docker,所以会导致一个问题。以普通用户登录的状况下,在使用docker images时必须添加sudo,那么如何让docker免sudo依然可用呢?
2.问题描述:
当以普通用户身份去使用docker命令时,出现以下错误:
qwe@ubuntu:~$ systemctl start docker
qwe@ubuntu:~$ docker version
Client: Docker Engine - Community
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:45:49 2020
OS/Arch: linux/amd64
Experimental: false
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.40/version: dial unix /var/run/docker.sock: connect: permission denied
可以看都,最后告知我们是权限的问题。
那么在linux文件权限有三个drwxrwxrwx
其中第一为d代表该文件是一个文件夹
前三位、中三位、后三位分别代表这属主权限、属组权限、其他人权限。
下面是报错文件的权限展示,可以看到其属主为root,权限为rw,可读可写;其属组为docker,权限为rw,可读可写。如果要当前用户可直接读取该文件,那么我们就为docker.sock 添加一个其他用户可读写权限 或者添加1个用户组就可以了
qwe@ubuntu:~$ cd /var/run
qwe@ubuntu:/var/run$ ll |grep docker.
drwx------ 5 root root 120 Nov 2 21:18 docker/
-rw-r--r-- 1 root root 6 Nov 2 21:18 docker.pid
srw-rw---- 1 root docker 0 Nov 2 21:18 docker.sock=
3.问题解决:
方法一:一劳永逸
#如果还没有 docker group 就添加一个:
$sudo groupadd docker
#将用户加入该 group 内。然后退出并重新登录就生效啦。
$sudo gpasswd -a ${USER} docker
#重启 docker 服务
$systemctl restart docker
# 注意:上面的步骤执行一次即可,后面在每次执行docker时,执行下面的newgrp - docker即可,上面的代码无需再执行
#切换当前会话到新 group 或者重启 X 会话
$newgrp - docker
#注意:最后一步是必须的,否则因为 groups 命令获取到的是缓存的组信息,刚添加的组信息未能生效,所以 docker images 执行时同样有错。
方法二:修改权限
#每次启动docker或者重启docker的之后给docker.sock添加一个其他用户可读写权限
$cd /var/run
$sudo chmod 666 docker.sock
方法三:
# 每条命令前面加上sudo