Docker:为什么我需要在 Linux 中使用 sudo?

问题描述 投票:0回答:3

我正在完成本教程设置 Docker,我发现他们所有的示例都是这样写的

docker run hello-world

但是当我尝试时,它说套接字上的权限被拒绝,我必须这样做

sudo docker run hello-world

运行示例。为什么即使对于这些简单的示例也需要 root 权限?

linux docker permissions sudo
3个回答
21
投票

运行 docker 容器需要用户是

docker
的成员。默认情况下,当您安装 docker 时,添加到其中的唯一用户是
root
。如果您想从中运行 docker 容器,您可以将自己的用户添加到该组。


11
投票

需要 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


0
投票

默认情况下,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
© www.soinside.com 2019 - 2024. All rights reserved.