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

【51CTO.com快译】在Ubuntu上安装Docker很容易!连新手都可以在15分钟内安装完毕。安装Docker后,我注意到无法以普通用户的身份执行大多数Docker操作。每次我都只好以“root”用户的身份或拥有“sudo”权限的情况下运行Docker。每当我尝试以非root用户的身份或在没有sudo权限的情况下运行Docker,都会出现以下错误:

成都创新互联公司服务项目包括南县网站建设、南县网站制作、南县网页制作以及南县网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,南县网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到南县省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!GotpermissiondeniedwhiletryingtoconnecttotheDockerdaemonsocketatunix:///var/run/docker.sock:Gethttp://%2Fvar%2Frun%2Fdocker.sock/v1.40/version:dialunix/var/run/docker.sock:connect:permissiondenied

比如说,我想使用以下命令以普通用户的身份查看Docker版本:

$dockerversion

我还收到该错误消息:

Client:DockerEngine-CommunityVersion:19.03.8APIversion:1.40Goversion:go1.12.17Gitcommit:afacb8b7f0Built:WedMar1101:25:462020OS/Arch:linux/amd64Experimental:falseGotpermissiondeniedwhiletryingtoconnecttotheDockerdaemonsocketatunix:///var/run/docker.sock:Gethttp://%2Fvar%2Frun%2Fdocker.sock/v1.40/version:dialunix/var/run/docker.sock:connect:permissiondenied

但是当我在拥有sudo权限的情况下运行同一命令时:

$sudodockerversion

它显示了当前安装的Docker版本的全部详细信息,如下所示。

Client:DockerEngine-CommunityVersion:19.03.8APIversion:1.40Goversion:go1.12.17Gitcommit:afacb8b7f0Built:WedMar1101:25:462020OS/Arch:linux/amd64Experimental:falseServer:DockerEngine-CommunityEngine:Version:19.03.8APIversion:1.40(minimumversion1.12)Goversion:go1.12.17Gitcommit:afacb8b7f0Built:WedMar1101:24:192020OS/Arch:linux/amd64Experimental:falsecontainerd:Version:1.2.13GitCommit:7ad184331fa3e55e52b890ea95e65ba581ae3429runc:Version:1.0.0-rc10GitCommit:dc9208a3303feef5b3839f4323d9beb36df0a9dddocker-init:Version:0.18.0GitCommit:fec3683

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

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

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

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

$sudogroupadddocker

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

$sudousermod–aGdocker$USER

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

或者,运行以下命令,对组进行更改:

$newgrpdocker

从现在开始,普通用户(非root用户)可以在没有sudo权限的情况下使用Docker。

不妨以普通用户的身份运行以下命令:

$dockerversion$dockerrunhello-world

示例输出:

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

假设你在将用户添加到Docker组之前已经在拥有“sudo”权限的情况下运行了几个Docker命令,可能会看到如下所示的错误:

WARNING:Errorloadingconfigfile:/home/user/.docker/config.json-stat/home/user/.docker/config.json:permissiondenied

上述错误信息表明,由于“sudo”命令,你的~/.docker/目录是在拥有不正确权限的情况下创建的。为了解决这个问题,使用以下命令更改该目录归属和权限:

$sudochown"$USER":"$USER"/home/"$USER"/.docker-R$sudochmodg+rwx"$HOME/.docker"-R

注销、重新登录,使之生效。

如果这仍解决不了问题,你可能需要删除~/.docker/目录。该目录会自动重新创建,但你会失去所有自定义设置,如果之前有的话。

但愿本文对你有所帮助。

原文标题:How To Run Docker As Non-root User In Linux,作者:SK

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【编辑推荐】

一文看懂Docker容器技术架构及其中的各个模块 Docker通过使用大数据可以成为强大的软件开发平台 Docker容器中应避免的10件事 如何备份Kubernetes和Docker Docker+k8s 容器云建设中 10 个常见难点
新闻名称:如何在Linux中以非root用户运行Docker?
链接地址:http://hbruida.cn/article/cjcgoc.html