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

在运行docker run命令时,让当前登录用户拥有主机操作系统上的共享文件夹/卷,而不是“root”,docker,Docker,下面我有两个命令可以在主机操作系统上创建共享文件夹/卷,但文件夹的所有者始终是root用户。我如何才能让当前登录的ubuntu用户拥有它?因此,主机操作系统中的数据文件夹应该属于ubuntu,而不是root用户 当前主机操作系统用户 码头工人 Dockerfile 我试试看 主机操作系统共享文件夹/卷 将用户${USER}从Dockerfile中取出不会改变结果。因此,我相信这里发生的情况是,您当前工作目录中还没有数据/文件夹,但在运行这些命令之后,您现在可能会这样做;所以请将其删除 当您使用$

下面我有两个命令可以在主机操作系统上创建共享文件夹/卷,但文件夹的所有者始终是root用户。我如何才能让当前登录的ubuntu用户拥有它?因此,主机操作系统中的数据文件夹应该属于ubuntu,而不是root用户

当前主机操作系统用户

码头工人

Dockerfile

我试试看

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


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

因此,我相信这里发生的情况是,您当前工作目录中还没有数据/文件夹,但在运行这些命令之后,您现在可能会这样做;所以请将其删除

当您使用$pwd/data旋转容器时,它正在为您创建它,从外观上看,在将UID设置为bentcoder之前,先这样做

如果你要指定绑定挂载,那么首先要确保它确实存在。如果确实存在,那么你就全部设置好了,除非你也用root创建了它;然后它会正确映射,但是你将无法写入它,如果它不存在,那么你就会看到你遇到的问题

您根本不需要在docker run命令中指定-u bentcoder;这太冗长了


另外-您在Dockerfile中的ENV用户有一个输入错误。

我可以事先手动创建文件夹来解决问题,但如果可能的话,我会尽量避免手动创建。@BentCoder您正在映射一个不存在的文件夹;这就是它的样子。所以您要说的是,在主机操作系统和使用docker run在运行时以特定用户身份拥有它…-v/不存在/文件夹:/gueest/文件夹…?另外,我没有看到ENV-.@BentCoder的拼写错误。我不知道。你的拼写错误是betcoder而不是BentCoder。明白了!我会把这个问题保留一段时间,看看是否有其他人有任何输入。谢谢你提供的信息W
ubuntu@linux:~$ id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu)
ubuntu@linux:~$ pwd
/home/ubuntu
$ docker -v
Docker version 17.09.0-ce, build afdb6d4
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