ZH ·
🌏 English

如何配置 Docker 以免 sudo 权限运行

Run Docker commands without sudo

新安装的 Docker 默认需要使用 sudo 才能运行 docker 命令。

例如,运行 GPU Docker 镜像时若不加 sudo,通常会报错:

$ docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi

docker: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

报错信息显示没有权限访问 Docker 守护进程(daemon)。这是因为 Docker 默认限制了普通用户的访问权限。以下是配置免 sudo 运行 Docker 的步骤:

1. 创建 docker 用户组(若不存在)

首先创建一个 Docker 用户组,如果该组已经存在,则可以跳过此步骤。

$ sudo groupadd docker

2. 将当前用户添加到 docker 组

将当前登录用户添加到 docker 用户组中:

$ sudo gpasswd -a $USER docker

重要提示:执行此操作后,请注销当前用户并重新登录,或者重启系统,以便用户组权限变更生效。

3. 重启 Docker 服务

重启 Docker 守护进程以应用更改:

$ sudo service docker restart

遇到权限报错的特殊情况

如果你在 root 用户下安装并运行过 Docker,随后切换到普通用户并按照上述步骤操作后,仍遇到权限报错:

docker: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.

这通常是因为 Docker socket 文件的所有权配置问题,可以通过以下命令修复:

sudo chown $USER /var/run/docker.sock

参考资料:

https://docs.docker.com/engine/install/linux-postinstall/

https://docs.docker.com/engine/security/rootless/

https://raw.githubusercontent.com/sindresorhus/guides/main/docker-without-sudo.md

https://stackoverflow.com/questions/48568172/docker-sock-permission-denied