docker命令不需要敲sudo的方法

docker命令不需要敲sudo的方法

由于docker daemon需要绑定到主机的Unix socket而不是普通的TCP端口,而Unix socket的属主为root用户,所以其他用户只有在命令前添加sudo选项才能执行相关操作。

如果不想每次使用docker命令的时候还要额外的敲一下sudo,可以按照下面的方法配置一下。

  1. 创建一个docker组

    新建用户组docker之前,查看用户组中有没有docker组

    sudo cat /etc/group | grep docker
    

    如果没有,创建一个docker组

    $ sudo groupadd docker
    

    如果有docker组,跳过第一步,执行第二步

  2. 添加当前用户到docker组

    $ sudo usermod -aG docker $USER
    

    其中,$USER是你的用户名,你可以用echo $USER在终端查看

  3. 重启docker-daemon,以便让权限生效

    sudo systemctl restart docker
    
  4. 验证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可以使用该位

参考

linux-comm-chmod

容器安全拾遗 - Rootless Container初探

上一篇:Docker-界面化


下一篇:ubuntu install jenkins by docker