【问题标题】:Run containers as other user以其他用户身份运行容器
【发布时间】:2015-03-14 20:44:36
【问题描述】:

正在运行的容器以 root 用户身份占用空间。我的要求是容器应该以 some_user 身份运行。

我在网上查了一下,但无法更清楚。每个论坛都说不同的东西。正确的方法是什么。

PS:我是在服务器上运行docker,重启docker进程会很麻烦。所以如果有什么方法可以在运行时直接指定就好了。

【问题讨论】:

  • docker组中的用户可以在没有root权限的情况下运行Docker,但是docker组相当于root。
  • @user2915097 当您将用户添加到 docker 组时,您允许在没有 root 的情况下运行 docker 客户端,但 docker 客户端仅向 docker 服务器发送命令。所以在这里询问如何从其他用户运行 docker 服务器 - 不确定这是可能的。
  • 用户可能不是root,但具有相同的uid和权限
  • docker 服务器可以选择通过--userns-remap 在用户命名空间中运行容器。然后运行守护进程的用户,以及任何可以访问它的用户,都拥有root权限。不过,它会阻止运行 --privileged 容器,原因有些明显。

标签: docker root dockerfile


【解决方案1】:

我找到了解决这个问题的方法。

所有 docker 的数据都存储在 /var/lib/docker/devicemapper/devicemapper/data 中。

由于此文件夹已安装到 root 用户的卷上。 它的解决方案是(挂载)/var 目录完全到另一个物理位置。

telinit 1
cp -pR /var /home/var
mv /var /var.old
ln -s /home/var /var
telinit 2
sudo rm -rf /var.old

【讨论】:

  • 抱歉,这甚至没有意义,因为卷和用户是完全正交的概念。通过移动具有合法用途的位置,您不会更改其权限的任何内容。只要您的 docker 守护程序以 root 身份运行,文件仍然是 root 的。
  • /var 是根目录,而 /home/user/ 是用户的目录。由于数据现在已挂载在用户帐户中,因此用户将能够在没有 root 权限的情况下查看数据。问题在于可见性因素。很抱歉造成混乱,但上述解决方案就像一个魅力。
  • 目录/home/user 通常归用户user 所有。但是,这对其下面的目录没有影响。如果目录/home/user/var/lib/docker/devicemapper/devicemapper/data 仍归根用户所有——而你没有提及任何会改变这一事实的事情——用户user 仍然无法对它做任何事情,而当它在@987654326 中时他们无法做到@.
  • 目录 /home/user 对用户是可见的并且对它有权限。用户一旦登录就可以对这些目录进行任何更改,因为他拥有它,因此这个解决方案对我有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-06
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 2019-11-09
  • 2012-02-05
相关资源
最近更新 更多