我正在完成本教程设置 Docker,我发现他们所有的示例都是这样写的
docker run hello-world
但是当我尝试时,它说套接字上的权限被拒绝,我必须这样做
sudo docker run hello-world
运行示例。为什么即使对于这些简单的示例也需要 root 权限?
需要 sudo 级别的访问权限才能访问 Docker 是一个健全的安全限制。否则,任何可以运行任何 Docker 命令的人都可以运行这个:
docker run -v /etc:/host-etc busybox \
sh -c 'echo ALL ALL(ALL:ALL) NOPASSWD:ALL >> /host-etc/sudoers'
也就是说,任何能够运行 Docker 命令的人都已经
root
了。
实际上,这是由
/var/run/docker.sock
上的文件权限控制的。拥有一个拥有该套接字文件的 docker
组并为其提供模式 0660
是一种常见的设置(尤其是在 Ubuntu 上)。但是,再次强调,任何属于 docker
组成员的人都可以读取和更改主机上的任意文件,并且除了名称之外,都是 root
。
默认情况下,root 用户拥有与 Docker 守护进程绑定的 unix 套接字。因此,当您尝试不使用 sudo 时,它会拒绝许可。
您可以通过以下步骤在没有 sudo 的情况下运行,只需将用户添加到新创建的组 docker 即可:
第一步:创建docker组
sudo groupadd docker
第 2 步:将您的用户添加到 docker 组
sudo usermod -aG docker $USER
第 3 步:注销并重新登录,以便重新评估您的群组成员身份。 运行此命令以激活对组的更改:
newgrp docker
现在,无需 sudo 即可运行。通过运行简单的 hello-world 图像进行验证:
docker run hello-world