我正在使用 Docker (1.3.1) 在容器内构建 RPM:
docker run -v /home/matt/build:/build build-rpm /build/build-pkg.sh
这工作正常(我的用户在docker
组中,所以我不需要 sudo)并将完成的.rpm
文件放在当前目录中。问题是该文件是由root拥有的。
我该如何安排它,以便创建的文件由与我运行 docker 的同一用户拥有?
我正在使用 Docker (1.3.1) 在容器内构建 RPM:
docker run -v /home/matt/build:/build build-rpm /build/build-pkg.sh
这工作正常(我的用户在docker
组中,所以我不需要 sudo)并将完成的.rpm
文件放在当前目录中。问题是该文件是由root拥有的。
我该如何安排它,以便创建的文件由与我运行 docker 的同一用户拥有?
您可以尝试创建(在自定义图像的 Dockerfile 中)用户并将其设置为容器使用的用户
RUN adduser --system --group --shell /bin/sh auser \
&& mkdir /home/auser/bin
USER auser
然后检查是否将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
(假设这
101:101
是您容器UID:GID
中的www-data
用户。)
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