我一整天都在定位问题,并将Github中的问题最小化。 .
当我将主机文件挂载到 docker 容器并进入 docker 容器然后运行 ls -lash
查看文件权限。挂载后,MacOS的文件似乎在user
权限拥有的容器中它是由 Dockerfile 创建的,但是容器中的 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
最佳答案
主机卷将具有传递到容器中的主机的所有权和权限。这是由文件系统级别的 uid/gid 完成的,而不是由容器和主机之间可能不同的用户名或组名完成的。
较新版本的 Docker for Mac 附带一个 OSXFS 驱动程序,用于将 Mac 文件系统安装到嵌入式 Linux VM 中,并自动将 Linux 用户映射到 Mac uid。这有点像 NFS 压缩 uid,但更具动态性。您可以在以下位置阅读有关 OSXFS 的更多信息:https://docs.docker.com/docker-for-mac/osxfs/
关于Centos 和 MacOS 不同的 Docker 卷挂载权限策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54886956/