Docker不以用户身份运行命令

时间:2014-10-22 09:41:57

标签: unix docker virtualization

我是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

有人可以告诉我使用USER指令。 RUNCMD说明之间有什么区别?

感谢。

1 个答案:

答案 0 :(得分:4)

来自docs

  

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

但是,它并没有创建用户。您需要已经完成此操作(例如,使用较早的RUN指令。)

  

" RUN"有什么区别?和" CMD"说明?

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

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