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

时间:2020-03-21 11:44:55  来源:igfitidea点击:

在Ubuntu上安装Docker非常简单!任何人,甚至新手都可以在15分钟内安装它。

安装Docker之后,我注意到我无法以普通用户的身份执行大多数Docker操作。
每次我都必须以“ root”用户或者具有“ sudo”权限运行Docker。
每当我尝试以非root用户身份或者没有sudo权限运行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.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 2017
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 2017
 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 2017
  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

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

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

在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

输出示例:

看到了吗?
我现在可以在没有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 /目录。
它会自动重新创建,但是如果有的话,我们将丢失所有自定义设置。