Docker:构建映像时永久获取文件

时间:2019-06-21 06:44:20

标签: docker

我正在按照these的说明从docker构建python3.7的图像,其中也包含ruby-我特别需要2.1.5(不要问)

所以我的Dockerfile是这样的:

FROM python:3.7

SHELL ["/bin/bash", "-c"]


RUN apt-get update \
    && apt-get install -y --no-install-recommends \
    build-essential \
    curl \
    dirmngr \
    gnupg2 \
    && curl -sSL https://rvm.io/mpapis.asc | gpg2 --import - \
    && gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB \
    && curl -sSL https://get.rvm.io |  bash -s stable \
    && usermod -a -G rvm root \
    && source /etc/profile.d/rvm.sh \
    && rvm install ruby-2.1.5

构建成功完成,但是最终映像的路径中没有ruby,这是此命令source /etc/profile.d/rvm.sh实际上在构建期间没有任何作用的结果。

当我在容器中运行cmd并运行它时,ruby可用。

那是为什么?

2 个答案:

答案 0 :(得分:0)

请参见this

  

RUN指令将在当前图像顶部的新层中执行所有命令,并提交结果。

因此,RUN中的所有Dockerfile只会影响映像生成,而不影响容器。您应将任何source放在entrypointcmd中。或在Dockerfile中建立符号链接以将其链接到/bin/

答案 1 :(得分:0)

如果您在仅针对该命令存在的shell中提供脚本,则该脚本不会对以后的任何命令产生任何持久影响。

尝试一下:

RUN /bin/bash -c "source /etc/profile.d/rvm.sh; command1; command2; command3;"
相关问题