是否有办法将用户保留在docker base映像上?

是否有办法将用户保留在docker base映像上?,docker,dockerfile,Docker,Dockerfile,我正在从提供的Docker映像构建Docker映像。我需要安装需要管理权限的新依赖项。所提供映像的默认用户没有管理权限。完成后,我想将默认用户更改回以前的默认用户 有没有一种方法可以在不事先知道的情况下一般地保留基本图像的用户 注意:我不是问如何检查docker映像并在Dockerfile之外找到默认用户。我想知道是否有一种方法可以在文件本身中实现这一点 参见下面的示例Dockerfile FROM supliedImage USER root ... Perform administrati

我正在从提供的Docker映像构建Docker映像。我需要安装需要管理权限的新依赖项。所提供映像的默认用户没有管理权限。完成后,我想将默认用户更改回以前的默认用户

有没有一种方法可以在不事先知道的情况下一般地保留基本图像的用户

注意:我不是问如何检查docker映像并在
Dockerfile
之外找到默认用户。我想知道是否有一种方法可以在文件本身中实现这一点

参见下面的示例
Dockerfile

FROM supliedImage

USER root
... Perform administrative task
USER <Default user from supplied image>
来自supliedImage
用户根
... 执行行政任务
使用者

嗯。。。没有办法按照您希望的方式进行,但您可以始终使用多阶段构建的变通方法:

FROM solr:alpine as build

RUN whoami

FROM build as prepare_dependencies
USER root
RUN echo 'I am root' > /the_root_important_message

FROM build

COPY --from=prepare_dependencies /the_root_important_message /the_root_vital_message

RUN echo "now I'm $( whoami )"
RUN cat /the_root_vital_message
CMD echo 'this is a pain'
不知怎的,我很确定这不是你想要的

既然这个话题很有趣,我决定尝试一种不同的方法:

FROM solr:alpine as build

RUN whoami

FROM build as prepare_dependencies
USER root
RUN apk --no-cache --update add sudo \
    && echo 'ALL ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers

RUN echo "this is secret" > /secretfile
RUN chmod 400 /secretfile

FROM build

COPY --from=prepare_dependencies /usr/bin/sudo /usr/bin/sudo
COPY --from=prepare_dependencies /usr/lib/sudo /usr/lib/sudo
COPY --from=prepare_dependencies /etc/sudoers /etc/sudoers
COPY --from=prepare_dependencies /secretfile /secretfile

RUN sudo -l
RUN sudo cat /secretfile

RUN echo "now I'm $( whoami )"

RUN echo "cleanup" \
    && sudo rm -rf \
        /etc/sudoers /secretfile \
        /usr/lib/sudo /usr/bin/sudo

CMD echo 'this is a pain'

恐怕没有办法了,你说得对,这不符合我的目标;但是,对于一个更简单的案例来说,这绝对是一个聪明的解决方案。这仍然是可怕的,但不知为什么我更喜欢它。。。