在docker,写入文件挂载文件系统为非根?

我有一个docker容器与-v / home / dan:/ home / dan:rw。 当容器将文件写入/ home / dan时,文件在主机文件系统中由root拥有。 有没有一种方法可以使从容器写入已安装卷的文件被主机文件系统上的某个任意用户拥有?

编辑:这已经改变,因为我原来的答复说,这是不能做的。 根据Mandark的答案:

这可以通过为docker run命令使用-u开关来完成。

例如:

docker run -v /home/dan:/home/dan -u `id -u $USER` IMAGE 

正如FrançoisZaninotto指出的那样,可以使用用户标识。

这可以通过为docker run命令使用-u开关来完成。

例如:

 docker run -v /home/dan:/home/dan -u `id -u $USER` IMAGE 

遵循mandark的答案 – 我想说,包括用户组也是很好的,否则你最终会得到属于user: USERgroup: root 。 为了达到user:user只需传入组ID,例如:

 docker run -v /home/dan:/home/dan -u `id -u $USER`:`id -g $USER` IMAGE # if it's for the current user, then you can omit the $USER env var docker run -v /home/dan:/home/dan -u `id -u`:`id -g` IMAGE 

这是可能的。 很难自动化,但这是可能的。 过程如下:

  1. 在主机中,确定当前的用户ID和组ID
  2. 在docker容器中,运行一个shell脚本来:

    • 从主机添加一个新组
    • 从主机添加一个新的用户,并使用相同的用户标识(属于刚刚创build的组)
    • sudo作为这个新用户

现在,容器内生成的每个文件将使用正确的用户ID和组ID,主机将它们附加到您的用户。

我已经写了一个工具来使用make自动化,这就是所谓的make-docker-command 。 希望这可以帮助。