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