网站搜索

如何在 Linux 中以非 root 用户身份运行 Docker


在 Ubuntu 上安装 Docker 非常简单!任何人,甚至新手,都可以在 15 分钟内安装它。安装 Docker 后,我发现我无法以普通用户身份执行大多数 Docker 操作。我每次都必须以“root”用户身份或“sudo”权限运行 Docker。每当我尝试以非 root 用户身份运行 Docker 或没有 sudo 权限时,都会收到以下错误:

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

例如,我想使用命令以普通用户身份检查 Docker 版本:

docker version

而且,我收到此错误消息:

Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b7f0
Built: Wed Mar 11 01:25:46 2020
OS/Arch: linux/amd64
Experimental: false
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.40/version: dial unix /var/run/docker.sock: connect: permission denied

但是当我使用 sudo 权限运行相同的命令时;

sudo docker version

它显示当前安装的 Docker 版本的完整详细信息,如下面的输出所示。

Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b7f0
 Built:             Wed Mar 11 01:25:46 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b7f0
  Built:            Wed Mar 11 01:24:19 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

错误 - 尝试连接到 unix 上的 Docker 守护进程套接字时权限被拒绝

在搜索 Docker 文档页面后,我意识到 Docker 守护进程默认绑定到 Unix 套接字而不是 TCP 端口。由于该 Unix 套接字由 root 用户拥有,因此 Docker 守护进程只能以 root 用户身份运行。因此,普通用户无法执行大多数 Docker 命令。

如果您想在Linux中以非root用户身份运行Docker,则需要执行以下步骤。我在 Ubuntu 18.04 服务器上测试了这个,效果很好!它也应该适用于其他 Linux 发行版。

重要警告:

从安全角度来看,以普通用户身份运行 Docker 并不是一个好主意。我个人不使用它,并且也不推荐它。如果这是您的个人系统并且您不将系统暴露在互联网上,那么这没什么大不了的。但是,请勿在生产系统中以非 root 用户身份运行 Docker。

在 Linux 中以非 root 用户身份运行 Docker

要修复 Docker 权限被拒绝错误并以非 root 用户身份使用 Docker,请使用以下命令创建一个名为“docker”的组:

sudo groupadd docker

接下来,将您的用户添加到 docker 组:

sudo usermod -aG docker $USER

将用户添加到 docker 组后,注销并重新登录以使更改生效。

或者,运行以下命令将更改应用到组:

newgrp docker

从现在开始,普通(非 root)用户无需 sudo 权限即可使用 Docker。

让我以普通用户身份运行以下命令:

docker version
docker run hello-world

示例输出:

在 Linux 中以非 root 用户身份运行 Docker

看?我现在可以在没有 sudo 权限的情况下运行这两个 Docker 命令。

以防万一,在将用户添加到 Docker 组之前,您已经使用“sudo”权限运行了一些 Docker 命令,您可能会看到类似下面的错误。

WARNING: Error loading config file: /home/user/.docker/config.json -
stat /home/user/.docker/config.json: permission denied

上述错误消息表明,由于“sudo”命令,您的 ~/.docker/ 目录是使用不正确的权限创建的。

要解决此问题,请使用以下命令更改此目录所有权和权限:

sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "$HOME/.docker" -R

注销并重新登录才能生效。

如果仍然无法解决问题,您可能需要删除 ~/.docker/ 目录。它将自动重新创建,但您将丢失所有自定义设置(如果有)。

资源:

  • Docker 安装后注意事项