AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 477551
Accepted
Flimm
Flimm
Asked: 2014-06-07 00:17:43 +0800 CST2014-06-07 00:17:43 +0800 CST 2014-06-07 00:17:43 +0800 CST

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

  • 772

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

docker ps

在 Ubuntu 上,二进制文件称为docker.io. 如果没有 sudo,它也不起作用:

sudo docker.io ps

如何配置 Docker 以便我不需要在每个 Docker 命令前加上 sudo?

docker
  • 5 5 个回答
  • 1320297 Views

5 个回答

  • Voted
  1. Best Answer
    Rinzwind
    2014-06-07T00:24:12+08:002014-06-07T00:24:12+08:00

    好消息:新的 docker(版本 19.03(目前处于实验阶段))将能够无根运行,从而消除使用 root 用户可能出现的问题。无需再搞乱提升的权限、root 和任何可能在您不想打开机器时打开您的机器的东西。

    来自[DockerCon 2019] Hardening Docker daemon with Rootless mode关于此的视频

    无根 Docker 模式的一些注意事项

    Docker 工程师表示,rootless 模式不能被视为对整套 Docker 引擎功能的替代。无根模式的一些限制包括:

    • cgroups 资源控制、apparmor 安全配置文件、检查点/恢复、覆盖网络等在无根模式下不起作用。
    • 从容器中公开端口目前需要手动 socat 帮助程序。
    • 只有基于 Ubuntu 的发行版支持无根模式下的覆盖文件系统。
    • Rootless 模式目前仅适用于可能不像您习惯的那样稳定的夜间构建。

    从 docker 19.3 开始,这是过时的(并且比需要的更危险):

    码头工人手册对此有这样的说法:

    授予非根访问权限

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

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

    警告:docker 组(或用 -G 指定的组)是 root 等价的;请参阅Docker 守护程序攻击面详细信息和这篇关于为什么我们不允许非 root 用户在 CentOS、Fedora 或 RHEL 中运行 Docker 的博文(感谢 michael-n)。

    在GitHub 上最近发布的实验性无根模式中,工程师提到无根模式允许以非特权用户身份运行 dockerd,使用 user_namespaces(7)、mount_namespaces(7)、network_namespaces(7)。

    用户需要运行 dockerd-rootless.sh 而不是 dockerd。

    $ dockerd-rootless.sh --experimental
    

    由于 Rootless 模式是实验性的,用户需要始终使用 –experimental 运行 dockerd-rootless.sh。


    重要阅读:Linux 的安装后步骤(它还链接到Docker Daemon Attack Surface details)。

    以非 root 用户身份管理 Docker

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

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


    • 如果 docker 组尚不存在,请添加它:

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

       sudo gpasswd -a $USER docker
      
    • 执行 anewgrp docker或注销/登录以激活对组的更改。

    • 您可以使用

       docker run hello-world
      

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

    • 1411
  2. Rohini Choudhary
    2016-02-28T11:57:56+08:002016-02-28T11:57:56+08:00

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

     sudo usermod -aG docker $USER
    

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

    • 379
  3. Christian Hujer
    2017-12-02T08:08:37+08:002017-12-02T08:08:37+08:00

    将用户添加到组docker授予运行 docker 权限的机制是获取对 docker 套接字的访问权限/var/run/docker.sock。如果包含的文件系统/var/run已在启用 ACL 的情况下挂载,这也可以通过 ACL 实现。

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

    为了完整起见,我只包括这个。

    总的来说,只要有基于组的好选择,我就建议避免使用 ACL:最好只通过查看组成员身份来理解系统中的权限。必须扫描文件系统以查找 ACL 条目以了解系统权限是安全审计的额外负担。

    警告 1:这与root添加$USER到docker组具有相同的等价性。您仍然可以以可以root访问主机文件系统的方式启动容器。

    警告 2:与基于组的安全性相比,ACL 对于安全审计而言要困难得多。如果可以使用组代替,至少在与审计相关的环境中,尽可能避免使用 ACL。

    • 138
  4. miu
    2020-11-20T04:06:23+08:002020-11-20T04:06:23+08:00

    在创建 docker 组并将我的用户添加到其中之后

    sudo groupadd docker
    sudo usermod -aG docker $USER
    

    ...我仍然必须为/var/run/docker.sock套接字和/var/run/docker目录提供适当的权限才能使其工作:

    sudo chown root:docker /var/run/docker.sock
    sudo chown -R root:docker /var/run/docker
    

    注销并再次登录(使用该用户)然后您将能够运行 docker 命令而无需sudo:

    docker run hello-world
    

    顺便说一句:这在​​ Ubuntu 21.10 中已修复,并且仅对于低于该版本的 Ubuntu 版本是必需的。

    • 29
  5. ostrokach
    2021-03-23T10:29:50+08:002021-03-23T10:29:50+08:00

    Docker 容器需要由 root 用户运行。您可以将自己添加到docker组中(例如通过运行sudo usermod -aG docker $USER),但这使得任何有权访问该$USER帐户的人都可以轻松获得对机器的根访问权限(例如通过在特权容器中安装根卷)。

    以非 root 用户身份运行 Docker 容器的一种更具安全意识的方法是使用 Podman:https ://podman.io/ 。从其网站:

    Podman 是一个无守护进程的容器引擎,用于在 Linux 系统上开发、管理和运行 OCI 容器。容器可以以 root 身份运行,也可以以无根模式运行。简单地说:alias docker=podman。

    另一种选择是 Singularity,它更常部署在 HPC 环境中:https ://sylabs.io/ 。

    • 5

相关问题

  • 如何升级 Docker

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve