如何在没有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,至少在审计相关环境中是这样。