Docker对已装载卷的访问权限。他们为什么属于root?

时间:2017-07-31 13:58:16

标签: linux docker permissions

我已将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

1 个答案:

答案 0 :(得分:2)

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守护进程仍然以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用户运行