如何在没有sudo的情况下使用docker?

在Docker的文档页面上,所有示例命令都显示为没有sudo ,如下所示:

 docker ps 

在Ubuntu上,二进制文件名为docker.io 。 没有sudo它也行不通:

 sudo docker.io ps 

如何配置Docker以便我不需要为每个Docker命令添加sudo前缀?

docker手册有这样的说法:

提供非root访问权限

docker守护程序始终以root用户身份运行,自Docker版本0.5.2起,docker守护程序绑定到Unix套接字而不是TCP端口。 默认情况下,Unix套接字由用户root拥有,因此,默认情况下,您可以使用sudo访问它。

从版本0.5.3开始,如果您(或您的Docker安装程序)创建一个名为docker的Unix组并向其添加用户,则当守护程序启动时,docker守护程序将使docker组的Unix套接字的所有权可读/写。 docker守护程序必须始终以root用户身份运行,但如果您以docker组中的用户身份运行docker客户端,则无需向所有客户端命令添加sudo。 从0.9.0开始,您可以指定除docker之外的组应该使用-G选项拥有Unix套接字。

警告:docker组(或使用-G指定的组)是root等效的; 请参阅Docker Daemon Attack Surface详细信息和这篇博文,了解为什么我们不让非root用户在CentOS,Fedora或RHEL中运行Docker (感谢michael-n)。


重要的是: Linux的安装后步骤 (它还链接到Docker Daemon Attack Surface详细信息 )。

以非root用户身份管理Docker

docker守护程序绑定到Unix套接字而不是TCP端口。 默认情况下,Unix套接字由用户root拥有,而其他用户只能使用sudo访问它。 docker守护程序始终以root用户身份运行。

如果您在使用docker命令时不想使用sudo,请创建一个名为docker的Unix组并向其添加用户。 当docker守护程序启动时,它会使docker组对Unix套接字的所有权进行读/写。


  • 添加docker组(如果尚不存在):

     sudo groupadd docker 
  • 将连接的用户“$ USER”添加到docker组。 如果您不想使用当前用户,请更改用户名以匹配您的首选用户:

     sudo gpasswd -a $USER docker 
  • 要么使用newgrp docker要么注销/以激活对组的更改。

  • 您可以使用

     docker run hello-world 

    检查你是否可以在没有sudo的情况下运行docker。

要在没有sudo情况下运行docker命令,您需要将您的用户(具有root权限的用户)添加到docker组。 对于此运行以下命令:

  sudo usermod -aG docker $USER 

现在,让用户注销然后再次登录。 通过正确的安装过程,可以很好地解释此解决方案

将用户添加到组docker授予运行docker权限的机制是访问/var/run/docker.sock的套接字。 如果已启用包含/var/run的文件系统并启用了ACL,则也可以通过ACL实现。

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

我只是为了完整而包含这个。

通常,我建议在基于组的良好替代方案可用时避免使用ACL:如果仅通过查看组成员身份可以理解系统中的权限,则会更好。 必须扫描文件系统以获取ACL条目才能理解系统权限,这是安全审核的额外负担。

警告1 :这与向docker组添加username具有相同的root等效。 您仍然可以以对主机文件系统具有root访问权限的方式启动容器。

警告2 :安全审核的ACL比基于组的安全性要困难得多。 如果可以使用组,则可能会避免使用ACL,至少在审计相关环境中是这样。