我有一个foo:foo(uid=1040)拥有的目录/home/foo/mydir,我在alpine docker镜像中绑定挂载如下:docker run -it --rm -v /home/foo/mydir:/tmp/mydir --user 1040 alpine但是当我检查容器中的目录时,它属于root:root。我疯了吗?我以为docker在挂载到容器中时会传递文件所有权?有没有办法保留权限(即在容器中拥有foo:foo的mydir)而不将其放在容器中?
foo:foo
/home/foo/mydir
docker run -it --rm -v /home/foo/mydir:/tmp/mydir --user 1040 alpine
root:root
mydir
z9smfwbn1#
我有两台Ubuntu Jammy机器,这个问题发生在一台机器上,而不是另一台。我终于找到了原因和解决办法。这个问题是由Docker Desktop引起的。在第一台机器上,我只安装了Docker引擎。第二台机器安装了Docker Desktop,它运行一个虚拟机,您的容器将在该虚拟机内运行。在这种情况下,您不能以相同的方式将主机目录挂载到容器中,因为您需要首先将其挂载到虚拟机中。一种解决方案是完全删除Docker(包括~/.docker),然后只安装Docker引擎(https://docs.docker.com/engine/install/)。或者,在第二台机器上,如果你也安装了Docker CE,你可以切换回“默认”上下文:
~/.docker
docker context use default
基于我的支持查询在这里:https://forums.docker.com/t/bind-mount-permissions-unexpected-mounting-as-root-root/129328?u=swpppp
1条答案
按热度按时间z9smfwbn1#
我有两台Ubuntu Jammy机器,这个问题发生在一台机器上,而不是另一台。我终于找到了原因和解决办法。
这个问题是由Docker Desktop引起的。在第一台机器上,我只安装了Docker引擎。第二台机器安装了Docker Desktop,它运行一个虚拟机,您的容器将在该虚拟机内运行。在这种情况下,您不能以相同的方式将主机目录挂载到容器中,因为您需要首先将其挂载到虚拟机中。
一种解决方案是完全删除Docker(包括
~/.docker
),然后只安装Docker引擎(https://docs.docker.com/engine/install/)。或者,在第二台机器上,如果你也安装了Docker CE,你可以切换回“默认”上下文:
基于我的支持查询在这里:
https://forums.docker.com/t/bind-mount-permissions-unexpected-mounting-as-root-root/129328?u=swpppp