Docker在已安装的卷中以root身份创建文件

Mat*_*t R 28 volumes docker file-ownership

我正在使用Docker(1.3.1)在容器内构建RPM:

docker run -v /home/matt/build:/build build-rpm /build/build-pkg.sh
Run Code Online (Sandbox Code Playgroud)

这工作正常(我的用户在docker组中,因此我不需要sudo)并.rpm在当前目录中删除已完成的文件.问题是该文件是由root拥有的.

我如何安排它,以便创建文件由我运行docker的同一用户拥有?

Von*_*onC 6

您可以尝试创建(在自定义映像的Dockerfile中)用户并将其设置为容器使用的用户

RUN adduser --system --group --shell /bin/sh auser \
 && mkdir /home/auser/bin
USER auser
Run Code Online (Sandbox Code Playgroud)

然后检查是否docker run -v /home/matt/build:/build build-rpm在/ build中安装共享文件夹auser.


问题2259中提到的另一个选项:

如果您chown在绑定安装之前的卷(在主机端),它将工作.
在这种情况下,您可以这样做:

mkdir /tmp/www
chown 101:101 /tmp/www
docker run -v /tmp/www:/var/www ubuntu stat -c "%U %G" /var/www
Run Code Online (Sandbox Code Playgroud)

(假设这101:101是容器UID:GID中的www-data用户.)


Pau*_*ver 3

Docker 以 root 身份运行,并且不知道您的用户在其虚拟环境中是什么(即使您位于 sudoers 组中)。但是您可以在构建 docker 映像时创建一个非 root 用户,该映像可以被称为任何您喜欢的名称。

# create a non-root user named tester, 
# give them the password "tester" put them in the sudo group
RUN useradd -d /home/tester -m -s /bin/bash tester && echo "tester:tester" | chpasswd && adduser tester sudo

# start working in the "tester" home directory
WORKDIR /home/tester
COPY ./src

# Make the files owned by tester
RUN chown -R tester:tester /home/tester

# Switch to your new user in the docker image
USER tester
Run Code Online (Sandbox Code Playgroud)

  • 我不太担心容器对容器内用户的看法。但是,从主机的角度来看,我希望该文件最终由启动“docker run”命令的用户拥有。这种方法对此有帮助吗? (33认同)
  • 我猜。我习惯了在 Vagrant VM 上操作“/vagrant”这个简单的故事:来宾对文件所有者的看法与主机的不同。 (2认同)