在我们的内部测试环境中,我们从基于 vSphere 的服务器配置 CentOS 虚拟机。这些图像是带有软件包和相关配置的 vanilla 7.1,以支持通过 LDAP 进行身份验证。我在 xfs 文件系统上安装了带有 OverlayFS 驱动程序的 Docker 1.13.1。
FROM centos:7
RUN useradd dockeruser
USER dockeruser
VOLUME /data
在主机上:
mkdir data
echo "hello from host" > data/host-msg.txt
docker run -ti --rm -v $(pwd)/data:/data testimage bash
容器内部:
echo "hello from container" > /data/container-msg.txt
bash: /data/container-msg.txt: Permission denied
列出容器内的目录内容:
drwxr-xr-x 2 12345 13000 25 Feb 12 21:36 data
drwxr-xr-x 5 root root 360 Feb 12 21:36 dev
drwxr-xr-x 1 root root 62 Feb 12 21:36 etc
该data
目录以 uid/gid 格式而不是用户名/组名显示所有权。
我已经阅读了许多描述这种行为的文章和问题以及各种 解决方法。
但是。在我本地的 Fedora 25 开发系统上,我没有得到任何这种行为。我执行上述过程,能够写入主机挂载的 /data 挂载,目录列表显示用户名/组名。
/
drwxrwxr-x 2 dockeruser dockeruser 4096 Feb 12 04:36 data
drwxr-xr-x 5 root root 360 Feb 12 22:00 dev
drwxr-xr-x 1 root root 4096 Feb 12 22:00 etc
/data
-rw-rw-r-- 1 dockeruser dockeruser 21 Feb 12 22:04 container-msg.txt
为了使一切尽可能与实验室配置相似,我通过 libvirt 在我的开发系统上建立了一个 CentOS 7.1 VM,并再次得到了相同的结果——没有弄乱 uid/gid 映射、用户命名空间,什么都没有。开箱即用地从 Just Worked 容器内部写入主机安装的卷。
什么可能解释这种行为?实验室 VM 上的 LDAP 是否以某种方式在文件系统级别引入了权限问题?有什么具体的我可以要求我们的运营团队检查或暂时禁用以尝试解决此问题吗?
最后,或许也是最重要的一点,如果在干净的 CentOS 或 Fedora Workstation 上,主机安装卷上的权限问题对我来说根本不是问题,那么为什么它仍然是 Docker 社区中的一个问题?这些设置中是否有一些配置与其他人正在使用的配置(包括我团队的实验室虚拟机)根本不同,以至于一切正常?