我已将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
。
答案 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用户运行