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
posted @ 2020-11-03 13:30  TR_Goldfish  阅读(232)  评论(0编辑  收藏  举报