【问题标题】:Docker volume mount permission strategy different in Centos and MacOSCentos 和 MacOS 不同的 Docker 卷挂载权限策略
【发布时间】:2019-02-27 00:45:32
【问题描述】:

我一整天都在定位问题,并在Github 中尽量减少问题。

当我将主机文件挂载到 docker 容器并进入 docker 容器然后运行ls -lash 以查看文件权限。挂载后,似乎MacOS的文件在容器中,其权限由Dockerfile创建的user拥有,但Centos在容器中的文件,其权限由root拥有。它在 MacOS 和 Centos7.6 之间使用相同的 docker 引擎版本(18.09.2)进行测试。

docker-problem git:(master) ✗ docker run -it -v $PWD:/home/level docker/test bash 
flaskuser@59aeaacf0f4b:/home/level$ ls -lash
total 8.0K
   0 drwxr-xr-x  4 flaskuser flaskgroup  128 Feb 25 19:24 .
4.0K drwxr-xr-x  1 flaskuser flaskgroup 4.0K Feb 25 19:21 ..
   0 drwxr-xr-x 15 flaskuser flaskgroup  480 Feb 25 19:27 .git
4.0K -rw-r--r--  1 flaskuser flaskgroup  382 Feb 26 11:21 Dockerfile
[root@vultr docker-problem]# docker run -it -v $PWD/:/home/level/ docker/test bash
flaskuser@c843984693a5:/home/level$ ls -lash
total 16K
4.0K drwxr-xr-x 3 root      root       4.0K Feb 26 11:29 .
4.0K drwxr-xr-x 1 flaskuser flaskgroup 4.0K Feb 26 13:14 ..
4.0K drwxr-xr-x 8 root      root       4.0K Feb 26 11:29 .git
4.0K -rw-r--r-- 1 root      root        284 Feb 26 11:29 Dockerfile

这是 docker 中的错误吗?

Test in MacOs

Test in Centos7.6

Github Link

【问题讨论】:

    标签: docker centos


    【解决方案1】:

    主机卷将具有传递到容器中的主机的所有权和权限。这是由文件系统级别的 uid/gid 完成的,而不是由容器和主机之间可能不同的用户名或组名完成的。

    较新版本的 Docker for Mac 附带 OSXFS 驱动程序,可将 Mac 文件系统挂载到嵌入式 Linux VM 中,并自动将 Linux 用户映射到 Mac uid。这有点像 NFS 压缩 uid,但更具动态性。你可以阅读更多关于 OSXFS 的信息:https://docs.docker.com/docker-for-mac/osxfs/

    【讨论】:

    • 感谢您的帮助:) 我仔细阅读了文档,我只能接受MacOS和Centos在文件权限上的不同。但是对于以消除平台差异为目标的 docker 来说,这感觉很奇怪。
    • @Eriice Docker 尽可能提供更好的用户体验。在本机 Linux 上,绑定挂载没有将 uid 映射从主机更改为容器的选项。当您使用虚拟机时,主机到 VM 文件系统的映射会执行类似于使用 osxfs 的 xhyve 解决方案。
    猜你喜欢
    • 2017-06-30
    • 1970-01-01
    • 2021-07-16
    • 2018-12-29
    • 2016-03-30
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多