在运行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
有一个错字。