在 Docker 的文档页面上,所有示例命令都没有显示sudo
,如下所示:
docker ps
在 Ubuntu 上,二进制文件称为docker.io
. 如果没有 sudo,它也不起作用:
sudo docker.io ps
如何配置 Docker 以便我不需要在每个 Docker 命令前加上 sudo?
在 Docker 的文档页面上,所有示例命令都没有显示sudo
,如下所示:
docker ps
在 Ubuntu 上,二进制文件称为docker.io
. 如果没有 sudo,它也不起作用:
sudo docker.io ps
如何配置 Docker 以便我不需要在每个 Docker 命令前加上 sudo?
好消息:新的 docker(版本 19.03(目前处于实验阶段))将能够无根运行,从而消除使用 root 用户可能出现的问题。无需再搞乱提升的权限、root 和任何可能在您不想打开机器时打开您的机器的东西。
来自[DockerCon 2019] Hardening Docker daemon with Rootless mode关于此的视频
从 docker 19.3 开始,这是过时的(并且比需要的更危险):
码头工人手册对此有这样的说法:
重要阅读:Linux 的安装后步骤(它还链接到Docker Daemon Attack Surface details)。
如果 docker 组尚不存在,请添加它:
将连接的用户“$USER”添加到 docker 组。如果您不想使用当前用户,请更改用户名以匹配您的首选用户:
执行 a
newgrp docker
或注销/登录以激活对组的更改。您可以使用
检查是否可以在没有 sudo 的情况下运行 docker。
要在没有的情况下运行 docker 命令
sudo
,您需要将您的用户(具有 root 权限)添加到 docker 组。为此运行以下命令:现在,让用户注销然后再次登录。此解决方案在此处通过正确的安装过程得到了很好的解释。
将用户添加到组
docker
授予运行 docker 权限的机制是获取对 docker 套接字的访问权限/var/run/docker.sock
。如果包含的文件系统/var/run
已在启用 ACL 的情况下挂载,这也可以通过 ACL 实现。为了完整起见,我只包括这个。
总的来说,只要有基于组的好选择,我就建议避免使用 ACL:最好只通过查看组成员身份来理解系统中的权限。必须扫描文件系统以查找 ACL 条目以了解系统权限是安全审计的额外负担。
警告 1:这与
root
添加$USER
到docker
组具有相同的等价性。您仍然可以以可以root
访问主机文件系统的方式启动容器。警告 2:与基于组的安全性相比,ACL 对于安全审计而言要困难得多。如果可以使用组代替,至少在与审计相关的环境中,尽可能避免使用 ACL。
在创建 docker 组并将我的用户添加到其中之后
...我仍然必须为
/var/run/docker.sock
套接字和/var/run/docker
目录提供适当的权限才能使其工作:注销并再次登录(使用该用户)然后您将能够运行 docker 命令而无需
sudo
:顺便说一句:这在 Ubuntu 21.10 中已修复,并且仅对于低于该版本的 Ubuntu 版本是必需的。
Docker 容器需要由 root 用户运行。您可以将自己添加到
docker
组中(例如通过运行sudo usermod -aG docker $USER
),但这使得任何有权访问该$USER
帐户的人都可以轻松获得对机器的根访问权限(例如通过在特权容器中安装根卷)。以非 root 用户身份运行 Docker 容器的一种更具安全意识的方法是使用 Podman:https ://podman.io/ 。从其网站:
另一种选择是 Singularity,它更常部署在 HPC 环境中:https ://sylabs.io/ 。