将git repo克隆到Dockerfile中的非根用户文件夹

将git repo克隆到Dockerfile中的非根用户文件夹,docker,dockerfile,Docker,Dockerfile,通过下一个cmd,我试图克隆到/home/impdev/Impala文件夹中。然而,docker克隆到root/Impala文件夹中。有办法补救吗 RUN adduser --disabled-password --gecos '' impdev && \ echo 'impdev ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers && \ su - impdev && \ git

通过下一个cmd,我试图克隆到/home/impdev/Impala文件夹中。然而,docker克隆到root/Impala文件夹中。有办法补救吗

RUN adduser --disabled-password --gecos '' impdev && \
    echo 'impdev ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers && \
    su - impdev && \
    git clone https://gitbox.apache.org/repos/asf/impala.git ~/Impala

这对我来说很重要,因为当您从帐户克隆时,所有权和组值被分配给克隆的文件夹及其子文件夹。

您应该使用Dockerfile和指令来控制当前用户上下文。这看起来像

USER root
RUN adduser --disabled-password --gecos '' --no-create-home impdev
WORKDIR /impdev
USER impdev
RUN git clone https://gitbox.apache.org/repos/asf/impala.git
请记住,Docker环境在许多方面不同于典型的Linux环境:由于映像通常只打包单个应用程序及其直接依赖项,因此创建多个用户或将用户视为具有主目录通常并不有趣。您几乎从不使用
su
sudo
,因为容器通常只做一件事,并按照用户需要的方式启动。这两个命令在脚本中也很难使用。(在您的示例中,如果对新用户执行
su
,则在脚本转到下一个命令之前,它将完成并返回到原始根用户上下文。)