Files
StudyDiary/04-博客发布/040-系统技术/Linux中非root权限控制Docker配置的方法.md
2026-07-23 20:36:13 +08:00

51 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
profileName: Happy Again
postId: "3548"
postType: post
categories:
- 15
---
本文介绍在**Linux**操作系统**Ubuntu**版本中,通过配置,实现以**非root用户**身份,进行**Docker**各项操作的具体方法。
在文章[疯狂学习GISDocker环境在Ubuntu系统中的配置](https://zhuanlan.zhihu.com/p/675507675)中,我们介绍了开源容器化平台和工具集**Docker**的详细配置方法;配置完毕后,**Docker**就已经可以正常使用了,但是还有着一个小问题——我们在**Unix**系统中进行**Docker**的各项操作时,由于**Docker**是和**Unix**的[套接字](https://zhida.zhihu.com/search?content_id=238900875&content_type=Article&match_order=1&q=%E5%A5%97%E6%8E%A5%E5%AD%97&zhida_source=entity)**Socket**)绑定的,而套接字归属于系统的**root**用户,非**root**用户如果需要访问它,就只能通过`sudo`命令实现;这也导致了,我们运行**Docker**时都必须要以**root**用户身份(也就是通过`sudo`命令)来实现。这就使得我们在执行很多和**Docker**有关的命令时,都需要输入一次**root**用户的密码,导致较为麻烦。那么,我们是否可以取消这一个限制呢?
答案是可以的,我们可以通过新建一个**Unix**[用户组](https://zhida.zhihu.com/search?content_id=238900875&content_type=Article&match_order=1&q=%E7%94%A8%E6%88%B7%E7%BB%84&zhida_source=entity)的方式,来实现上述需求。我们需要建立一个用户组,将其命名为`docker`,并将我们当前的非**root**用户放入这一个用户组中;这样操作之后,当**Docker**启动时,其会创建一个可供`docker`用户组成员访问的**Unix**套接字,从而使得我们可以用非**root**用户身份来进行后续的各项操作。
为完成上述工作,具体需要的操作如下。其中,本文所涉及的全部代码,都在终端中执行即可。
首先,执行如下的代码,创建名为`docker`的一个用户组。其中,`groupadd`是一个**Linux**系统命令,用于创建用户组;`docker`就是我们接下来要创建的用户组的名称。
运行上述代码,如下图所示。
![](https://picx.zhimg.com/v2-071b515a786ce5f43b55e240a09a5aeb_1440w.jpg)
接下来,执行如下的代码,将我们当前的非**root**用户放入刚刚创建的用户组中。其中,`usermod`是一个**Linux**系统命令,用于修改用户的属性和组关联;`-aG``usermod`命令的选项,其中`-a`表示追加(**Append**),`-G`表示指定用户所属的附加组;`docker`是要将用户添加到的用户组的名称;`$USER`是一个环境变量,表示当前用户的用户名。
```bash
sudo usermod -aG docker $USER
```
运行上述代码,如下图所示。
![](https://pic1.zhimg.com/v2-d0f0cadb67219129700673aa01fcc06c_1440w.jpg)
随后,执行如下的代码,切换当前会话的有效组。其中,`newgrp`是一个**Linux**系统命令,用于切换当前会话的有效组;`docker`是我们要切换到的目标组的名称。
运行上述代码,如下图所示。
![](https://picx.zhimg.com/v2-102d659f207dee8f1ec281ca91389321_1440w.jpg)
随后,就完成了我们的配置工作。此时,我们可以通过如下的代码,验证一下我们是否已经成功完成前述配置;该命令会下载一个测试映像并在容器中运行它。
运行上述代码,如下图所示。
![](https://pica.zhimg.com/v2-3bbb3ee481b965b5877592975b529f9e_1440w.jpg)
如果出现了上图所示的界面,就表示我们前述配置已经成功完成。在我们上一篇文章文章[疯狂学习GISDocker环境在Ubuntu系统中的配置](https://zhuanlan.zhihu.com/p/675507675)中,当时也用了这一句代码来测试**Docker**是否配置成功,而当时这一句代码的前面是需要有`sudo`字样的,如下图所示;而经过我们上述配置,就无需这个`sudo`了。
![](https://pic2.zhimg.com/v2-229cba24a287c659fb0174290d5dd377_1440w.jpg)
当然,如果大家运行了前述`docker run hello-world`代码后,出现了报错的情况,大家则可以参考**Docker**的[官方网站](https://link.zhihu.com/?target=https%3A//docs.docker.com/engine/install/linux-postinstall/),其中有对这一问题的说明。
至此,大功告成。