Docker不以USER身份运行命令

Mad*_*lzz 2 unix virtualization docker

我是新来的Docker,我在写我的论文时遇到麻烦Dockerfile。事实是,我创建了一个jonas523要执行shell命令的用户。因此,我将其放入其中,Dockerfile当我进入新容器时,我发现该命令未与我创建的新用户一起使用。

我想我不明白的USER指令提供Docker

USER jonas523

RUN \
    echo "JAVA_HOME=/usr/java/jdk1.7.0_45/bin" >> /home/jonas523/.bash_profile \
    && echo "ANT_HOME=/opt/apache-ant-1.8.2/bin" >> /home/jonas523/.bash_profile \
    && echo "export JAVA_HOME" >> /home/jonas523/.bash_profile \
    && echo "export ANT_HOME" >> /home/jonas523/.bash_profile \
    && echo "PATH=$PATH:$HOME/bin:$JAVA_HOME:$ANT_HOME" >> /home/jonas523/.bash_profile \
    && echo "export PATH" >> /home/jonas523/.bash_profile

RUN source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

谁能告诉我有关USER指令的使用。RUNCMD指令有什么区别?

谢谢。

Joh*_*ohn 5

文档

USER指令设置在运行映像以及以下任何RUN指令时使用的用户名或UID。

但是,它不会创建用户。您需要已经完成此操作(例如,使用更早的RUN说明)。

“ RUN”和“ CMD”指令之间有什么区别?

RUN用于逐步“分层” Docker镜像以安装必要的依赖项(例如RUN apt-get install ....)。您可以RUN在Dockerfile中有许多指令,并且它们在构建映像时都会执行(为简单起见,忽略构建缓存)。

CMD指令不会在期间执行docker build ...,而是指定您希望容器在上执行的命令。Dockerfile中docker run ...只能有CMD一条指令。

  • 好吧,现在更清楚了。但是当我使用“CMD”指令时,如何知道使用的是哪个用户呢?因此,如果我说:“用户 jonas523”“运行任何内容”我确信将使用用户 jonas523 构建任何内容?那是对的吗 ? (2认同)