【问题标题】:Docker access permissions on mounted volumes. Why do they belong to root?装载卷的 Docker 访问权限。为什么它们属于根?
【发布时间】:2018-01-07 03:33:03
【问题描述】:

我已将 Docker 设置为以 non-root user 运行。现在我可以以普通用户的身份启动我的容器,感觉更舒服了。

me@machine:~$ docker run -it -v ~/test:/test alpine:3.6 sh
/ # touch /test/test1

同时在主机上:

me@machine:~$ ls -l ~/test/
total 0
-rw-r--r-- 1 root root 0 Jul 31 15:50 test1

为什么文件属于root?如何使它们以及容器中创建的所有文件都属于me

有趣的事实:这发生在 Debian Linux 上。相反,在 Mac 上执行相同操作,创建的文件将属于 me

【问题讨论】:

    标签: linux docker permissions


    【解决方案1】:

    Mac OS Docker 和 Linux Docker 在行为上有很多变化。所以忽略那部分。专注于 Linux 方面。

    您使用https://docs.docker.com/engine/installation/linux/linux-postinstall/#manage-docker-as-a-non-root-user 所做的基本上只是意味着非root 用户可以访问docker 组。通过该 docker 组,您可以执行 docker 命令。但是 docker daemon 仍然以 root 用户身份运行。

    你可以通过运行来确认

    ps aux | grep dockerd
    

    当您进行卷映射时,该目录由 docker 创建,该目录最终具有 root 用户权限。您正在寻找的内容最近以Docker user namespaces 发布。请阅读以下网址的详细信息

    https://success.docker.com/KBase/Introduction_to_User_Namespaces_in_Docker_Engine

    这将指导您如何使用映射用户而不是 root 运行 docker 容器。简而言之,创建/更新 /etc/docker/daemon.json 文件以具有以下内容

    /etc/docker/daemon.json

    {
    "userns-remap": "<a non root user>"
    }
    

    然后重启 docker 服务。现在你的 docker 容器内部会认为他们有 root 权限,但他们会在主机上以非 root 用户身份运行

    【讨论】:

    • 谢谢,解释的很好,真的帮助我理解了!使用用户命名空间是否有任何潜在的负面影响(安全性、性能)?在服务器端,每次我想访问或修改主机端挂载卷中的某些文件时,我都不得不sudo 感到恼火。
    • 在用户命名空间映射之前有一个含义。因为从容器中逃逸出来的东西会直接获得 root 访问权限。但是使用用户命名空间,即使容器以某种方式到达主机操作系统,它也不会具有 root 访问权限。所以使用它更安全。关于 sudo,如果您将当前用户用作 userns-remap,那么它应该在没有 sudo 的情况下工作吗?
    • Re sudo: 没错,这就是我提出问题的初衷 :) 感谢您提供的信息!!
    猜你喜欢
    • 2021-01-04
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 2022-08-16
    • 2017-06-30
    • 1970-01-01
    • 2018-08-06
    相关资源
    最近更新 更多