Docker 绑定挂载权限 - 意外挂载为 root:root

Ale*_*vid 9 docker

/home/foo/mydir我有一个由 (uid=1040) 拥有的目录foo:foo,我将其绑定安装在 alpine docker 映像中,如下所示: docker run -it --rm -v /home/foo/mydir:/tmp/mydir --user 1040 alpine

但是当我检查容器中的目录时,它属于root:root. 我疯了吗?我认为 docker 在安装到容器中时会传递文件所有权?无论如何,是否可以保留权限(即在容器中mydir拥有的权限)而不将其放入容器中?foo:foo

Ser*_*ano 3

我有两台 Ubuntu Jammy 机器,此问题发生在一台机器上,但另一台机器上没有。我终于找到了原因和解决办法。

显然这个问题是由 Docker Desktop 引起的。在第一台机器上我只安装了 Docker 引擎。第二台机器安装了 Docker Desktop,它运行一个虚拟机,您的容器将在该虚拟机内运行。在这种情况下,您不能以相同的方式将主机目录挂载到容器中,因为您需要首先将其挂载到虚拟机中。

一种解决方案是完全删除 Docker(包括~/.docker),然后仅安装 Docker 引擎(https://docs.docker.com/engine/install/)。

或者,在第二台机器上,如果您也安装了 Docker CE,则可以切换回“默认”上下文:

docker context use default
Run Code Online (Sandbox Code Playgroud)

根据我的支持查询:

https://forums.docker.com/t/bind-mount-permissions-unexpected-mounting-as-root-root/129328?u=swpppp