自0.9版本发布以来,Docker下降LXC
并使用其自己的执行环境libcontainer
。您的问题有点老,但我想我的答案仍然适用您使用的版本。
快速解答:要了解卷的权限,可以类推mount --bind Host-Dir Container-Dir
。因此,为了满足您的要求,您可以使用任何传统方法来管理权限。我想ACL是您所需要的。
长答案:因此,如您的示例中那样,我们有一个名为dock的容器,该容器带有volume /data
。
docker run -tid --name dock -v /usr/container/Databases/:/data \
centos:latest /bin/bash
在容器内,我们的MySQL服务器已配置为使用/data
为其数据目录。因此,我们的数据库位于/data
容器内部。在Host OS容器的外部,我们从中装入了该/data
卷,/usr/container/Databases/
并分配了一个普通用户bob来备份数据库。在主机上,我们将为用户bob配置ACL 。
useradd -u 3000 bob
usermod -R o=--- /usr/container/Databases/
setfacl -R -m u:bob:rwx /usr/container/Databases/
setfacl -R -d -m u:bob:rwx /usr/container/Databases/
要进行测试,请使用bob进行备份。
su - bob
tar -cvf container-data.tar /usr/container/Databases/
tar将会列出,您可以看到我们的用户能够访问所有文件。
现在从容器内部进行检查,getfacl
您会注意到它显示的是3000 ,而不是bob。这是因为bob的UID是3000,并且容器中没有这样的用户,因此它只是显示从元数据中接收到的UID 。现在,如果您在容器中创建用户,您useradd -u 3000 bob
会注意到现在getfacl
显示的名称是bob而不是3000。
摘要:因此,您从容器内部或外部分配的用户权限会同时反映两种环境。因此,要管理卷的权限,主机中的UID必须与容器中的UID不同。
docker
尚不支持),LXC容器可以非特权用户身份运行。否则root
,如果容器配置不当,容器内的用户可能会爆发。即root
主机上root
的容器位于特权LXC容器中。