我有一个带有-v /home/dan:/home/dan:rw
的docker容器。当容器写入文件到/home/dan
时,主机文件系统中的文件所有者是root。有没有办法让从容器写入到挂载卷中的文件在主机文件系统上由一些任意用户拥有?
我有一个带有-v /home/dan:/home/dan:rw
的docker容器。当容器写入文件到/home/dan
时,主机文件系统中的文件所有者是root。有没有办法让从容器写入到挂载卷中的文件在主机文件系统上由一些任意用户拥有?
正如François Zaninotto所指出的,用户ID可以被使用。
这可以通过在docker run命令中使用-u开关来完成。
例如:
docker run -v /home/dan:/home/dan -u `id -u $USER` IMAGE
对于mandark的回答,我想补充一点,即最好还要包括用户组,否则您将会得到属于user: USER
和group: 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
编辑:自从我最初回答时情况发生了改变,我的回答是无法完成。根据Mandark的回答:
可以通过在docker run命令中使用-u开关来完成。
例如:
docker run -v /home/dan:/home/dan -u `id -u $USER` IMAGE
在Docker容器中运行一个shell脚本来:
现在,容器内生成的每个文件都将使用正确的用户ID和组ID,并且主机将将它们附加到您的用户。
我编写了一个使用make自动化的工具来实现这一点,叫做make-docker-command。希望这有所帮助。