解决非root用户没有权限运行docker命令的问题

3,632 阅读1分钟

解决非root用户没有权限运行docker命令的问题

前言

最近使用windows11 linux子系统安装daoker后提示:

To run Docker as a non-privileged user, consider setting up the Docker daemon in rootless mode for your user:

dockerd-rootless-setuptool.sh install

Visit docs.docker.com/go/rootless… to learn about rootless mode.

To run the Docker daemon as a fully privileged service, but granting >non-root users access, refer to docs.docker.com/go/daemon-a…

WARNING: Access to the remote API on a privileged Docker daemon is equivalent to root access on the host. Refer to the 'Docker daemon attack surface' documentation for details: docs.docker.com/go/attack-s…

解决问题

运行docker命令提示:

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": dial unix /var/run/docker.sock: connect: permission denied

feng@real:/var/run$ ll
total 12
drwxr-xr-x  8 root root    240 Feb 15 09:46 ./
drwxr-xr-x 19 root root   4096 Feb 15 09:36 ../
drwxrwxrwx  2 root root     80 Feb 15 09:36 WSL/
drwx------  6 root root    160 Feb 15 09:46 docker/
-rw-r--r--  1 root root      5 Feb 15 09:46 docker-ssd.pid
-rw-r--r--  1 root root      4 Feb 15 09:46 docker.pid
srw-rw----  1 root docker    0 Feb 15 09:46 docker.sock=
drwxrwxrwt  2 root root     40 Feb 15 09:36 lock/
drwxrwxrwt  2 root root     40 Feb 15 09:36 shm/
drwx--x--x  3 root root     60 Feb 15 09:37 sudo/
drwxr-xr-x  2 root root     40 Feb 15 09:36 user/
-rw-------  1 root root      0 Feb 15 09:46 xtables.lock

答案显而易见,没有访问/var/run/docker.sock的权限,要不用root用户,要不将用户添加到docker的用户组。

方法1: 使用sudo获取管理员权限,运行docker命令,这个方法在通过脚本执行docker命令的时候会有很多局限性

方法2: docker守护进程启动的时候,会默认赋予名为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令

sudo usermod -a -G docker feng #添加到docker用户组
newgrp docker     #更新用户组

结果

feng@real:/var/run$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES