docker命令不需要敲sudo的方法
由于docker daemon需要绑定到主机的Unix socket而不是普通的TCP端口,而Unix socket的属主为root用户,所以其他用户只有在命令前添加sudo选项才能执行相关操作。
如果不想每次使用docker命令的时候还要额外的敲一下sudo,可以按照下面的方法配置一下。
-
创建一个docker组
新建用户组docker之前,查看用户组中有没有docker组
sudo cat /etc/group | grep docker
如果没有,创建一个docker组
$ sudo groupadd docker
如果有docker组,跳过第一步,执行第二步
-
添加当前用户到docker组
$ sudo usermod -aG docker $USER
其中,
$USER
是你的用户名,你可以用echo $USER
在终端查看 -
重启docker-daemon,以便让权限生效
sudo systemctl restart docker
-
验证docker命令是否可以运行
$ docker info Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Build with BuildKit (Docker Inc., v0.5.1-docker) Server: ERROR: 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/info: dial unix /var/run/docker.sock: connect: permission denied errors pretty printing info
如果提示
get ......dial unix /var/run/docker.sock
权限不够,有四种方法,方法一,重启操作系统
reboot
,楼主用的是这种。方法二,切换用户组
如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。
用户可以在登录后,使用命令newgrp切换到其他用户组
$ newgrp docker $ docker info
方法三,改权限
修改
/var/run/docker.sock
权限sudo chmod a+rw /var/run/docker.sock
。查看权限情况 $ ls -la /var/run/docker.sock srw-rw---- 1 root docker 0 6月 16 08:08 /var/run/docker.sock 修改权限 $sudo chmod a+rw /var/run/docker.sock
方法四,执行
dockerd-rootless-setuptool.sh
,比较复杂,不推荐安装docker时,终端有提示执行这个Rootless脚本。
附:chomd命令符号模式
符号模式
使用符号模式可以设置多个项目:who(用户类型),operator(操作符)和 permission(权限),每个项目的设置可以用逗号隔开。 命令 chmod 将修改 who 指定的用户类型对文件的访问权限,用户类型由一个或者多个字母在 who 的位置来说明,如 who 的符号模式表所示:
who | 用户类型 | 说明 |
---|---|---|
u |
user | 文件所有者 |
g |
group | 文件所有者所在组 |
o |
others | 所有其他用户 |
a |
all | 所用用户, 相当于 ugo |
operator 的符号模式表:
Operator | 说明 |
---|---|
+ |
为指定的用户类型增加权限 |
- |
去除指定用户类型的权限 |
= |
设置指定用户权限的设置,即将用户类型的所有权限重新设置 |
permission 的符号模式表:
模式 | 名字 | 说明 |
---|---|---|
r |
读 | 设置为可读权限 |
w |
写 | 设置为可写权限 |
x |
执行权限 | 设置为可执行权限 |
X |
特殊执行权限 | 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行 |
s |
setuid/gid | 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限 |
t |
粘贴位 | 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位 |