在运行docker run命令时,让当前login用户拥有主机操作系统上的共享文件夹/卷而不是“root”

我有两个命令在主机操作系统上创build共享文件夹/卷,但该文件夹的所有者始终是root 。 我怎样才能得到ubuntu (他目前login用户)拥有它? 因此,主机操作系统中的data文件夹应该由ubuntu拥有,而不是root

当前主机操作系统用户

 ubuntu@linux:~$ id uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu) ubuntu@linux:~$ pwd /home/ubuntu 

docker

 $ docker -v Docker version 17.09.0-ce, build afdb6d4 

Dockerfile

 FROM ubuntu:16.04 ENV user bentcoder RUN useradd -m -d /home/${user} ${user} \ && chown -R ${user} /home/${user} USER ${user} CMD ["/bin/bash"] 

我尝试的命令

 ubuntu@linux:~$ docker run -i -t -d -v `pwd`/data:/home/bentcoder/data --name con img ubuntu@linux:~$ docker run -i -t -d -u `id -u` -v `pwd`/data:/home/bentcoder/data --name con img ubuntu@linux:~$ docker run -i -t -d -u bentcoder -v `pwd`/data:/home/bentcoder/data --name con img ubuntu@linux:~$ docker run -i -t -d -u ubuntu -v `pwd`/data:/home/bentcoder/data --name con img 

主机操作系统共享文件夹/卷

 ubuntu@linux:~$ ls -l drwxr-xr-x 2 root root 4096 Dec 2 14:00 data -rw-rw-r-- 1 ubuntu ubuntu 147 Dec 2 13:26 Dockerfile 

从Dockerfile中取出USER ${user}不会改变结果。

所以我相信这里发生了什么,你是不是已经在你的当前工作目录中的data/文件夹(你可能现在运行这些命令后,但现在删除它)。

当你用$(pwd)/data启动容器时,它将为你创build容器,并且在将你的UID设置为bentcoder之前,通过它的外观来bentcoder

如果你要指定bind-mount,那么确定它实际上是先存在的。 如果确实如此 – 那么你就全部设置了(除非你真的用root创build了它,否则它将正确映射 – 但是你将无法写入),如果没有的话 – 会看到你遇到的问题。

您不需要在-u bentcoder docker run命令中指定-u bentcoder ; 这只是冗长的。

另外 – 你在Dockerfile中的ENV user有一个错字。