如何在Ubuntu上不使用sudo的情况下使用Docker

时间:2020-03-05 15:30:03  来源:igfitidea点击:

本教程将向我们展示如何在Ubuntu Linux机器上不使用sudo命令的情况下输入docker命令。

如果使用Docker在本地计算机上进行测试和开发,则可能会遇到这些消息。

$docker run hello-world
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.27/containers/json: dial unix /var/run/docker.sock: connect: permission denied

我们可能会在docker命令之前使用sudo或者使用su以root身份登录来规避此问题。
但这不是必须的。
可以以普通用户身份运行,有两种方法。
一种是将用户添加到docker组,另一种是允许其写入docker使用的Unix套接字。
我们将在Ubuntu 18.04 LTS上展示这两种方法。

1)将用户添加到docker组

如果不存在,请创建新组。
由于该组可能已经存在,该命令可能会失败,但是无论如何我们还是要运行它。

sudo groupadd docker

接下来,我们需要将当前用户添加到该组。

sudo gpasswd -a $USER docker

如果我们不想添加当前登录的用户,而要添加其他用户,则可以将$USER更改为该用户的用户名。
请注意,必须允许用户使用sudo。

最后,我们需要重新加载shell程序以应用新的组设置。
为此,我们可以重新启动,也可以注销然后重新登录,但是当我们实际上想要更细微的东西时,这两种方法都是不正确的,所以让我们执行此命令

newgrp docker

现在我们准备好在没有sudo的情况下运行docker test程序

docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete 
Digest: sha256:97ce6fa4b6cdc0790cda65fe7290b74cfebd9fa0c9b8c38e979330d547d22ce1
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.

2)ACL列表

还有另一种方法可以做到这一点,那就是ACL列表。

仍以sudoer用户身份登录,我们需要运行此命令

sudo setfacl -m user:bobby:rw /var/run/docker.sock

当然,请为要使用docker的实际用户更改bobby。

现在,我们可以以该用户身份登录。

su bobby

现在我们可以使用docker,例如输入以下命令

docker ps

如果有的话,它应该列出容器。
如果没有,至少不会显示“权限被拒绝”错误。