1. 简介

Docker 是一款开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

以上摘自**《百度百科——Docker》**

Docker 为开发者带来了极大便利性,因此被广泛使用于工作学习中。然而,Docker 默认只有拥于 root 权限的用户才能使用,这主要是为了安全,具体可参见 non-root user how to install docker?。不过,对于不那么要求安全性的场景,或者服务器上的部分普通用户值得信赖,能安全使用其被赋予的权限,则可以考虑给这部分用户使用 Docker 的权限。

【注】以下操作基本都需要 root 权限(除最后一条外),只有拥有 root 用户权限的才能进行这些操作;进行完这些操作后,被赋予权限的普通用户才能使用 Docker。

2. 安装 Docker

如果你的主机上尚未安装 Docker,则可以参见官方安装教程安装好 Docker。

3. 普通用户使用 Docker

3.1 问题

普通用户直接使用 Docker 会报错权限不足:

1
docker: Got 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 进程使用 Unix Socket,而 /var/run/docker.sock 需要 root 权限才能进行读写操作。

因此,如果不考虑安全问题的话,也可以使用 root 权限直接改写 /var/run/docker.sock 文件的权限,使得其对所有普通用户都有读写权限:

1
sudo chmod 666 /var/run/docker.sock

3.2 方案

参考官方说明,使用 root 权限创建一个 docker 组,并将普通用户加入到该组中,然后刷新一下 docker 组使其修改生效即可:

1
2
3
4
sudo groupadd docker			# 有则不用创建
sudo usermod -aG docker USER # USER 为加入 docker 组的用户
newgrp docker # 刷新 docker 组
docker run hello-world # 测试无 root 权限能否使用 docker

【注】如果在运行上述命令时,USER 一直是登录状态,则也要使用 newgrp docker 来刷新以获取改变。

如果需要让普通用户在 Docker 中也能使用显卡,则需要进一步配置,具体参见 Nvidia 提供的官方指导

附录

参考资料: