在docker中,将文件作为非root用户写入已挂载的文件系统?

时间:2014-01-02 23:47:08

标签: docker

我有一个带-v / home / dan:/ home / dan:rw的docker容器。当容器将文件写入/ home / dan时,文件由root文件系统中的root拥有。有没有办法让它从容器写入装载卷的文件归主机文件系统上的某个任意用户所有?

4 个答案:

答案 0 :(得分:18)

正如François Zaninotto指出的那样,可以使用用户ID。

可以使用 -u 开关为 docker run 命令完成此操作。

例如:

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

答案 1 :(得分:10)

编辑:自从我的原始答案说它无法完成以来,情况发生了变化。根据{{​​3}}的回答:

  

可以使用 -u 开关为 docker run 命令完成此操作。

     

例如:

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

答案 2 :(得分:5)

跟进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

答案 3 :(得分:2)

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

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

    • 使用主机
    • 中的组ID添加新组
    • 从主机添加具有相同用户ID的新用户(并且属于刚刚创建的组)
    • sudo as this new user
  4. 现在,容器内生成的每个文件都将使用正确的用户ID和组ID,主机会将它们附加到您的用户。

    我已经编写了一个使用make自动化的工具,它被称为make-docker-command。希望这会有所帮助。