【问题标题】:Use env with arg in Dockerfile cause cache layer invalidate [duplicate]在Dockerfile中使用带有arg的env导致缓存层无效[重复]
【发布时间】:2021-01-20 16:22:01
【问题描述】:

为什么RUN命令的缓存层失效了?

FROM python:3.7-slim
ARG VERSION
RUN pip install --upgrade pip && pip install -r requirements.txt
ENV VERSION_2 2
ENV VERSION $VERSION
CMD ["env"]

如上面的dockerfile所示,使用build arg动态设置环境变量会导致RUN指令的缓存层失效,因为build-arg每次构建都会改变,而历史图片如下

IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
13d8c1c91aed   2 minutes ago   CMD ["env"]                                     0B        buildkit.dockerfile.v0
<missing>      2 minutes ago   ENV VERSION=1                                   0B        buildkit.dockerfile.v0
<missing>      2 minutes ago   ENV VERSION_2=2                                 0B        buildkit.dockerfile.v0
<missing>      2 minutes ago   RUN |1 VERSION=1 /bin/sh -c pip install --up…   5.28MB    buildkit.dockerfile.v0
<missing>      2 minutes ago   ARG VERSION                                     0B        buildkit.dockerfile.v0
<missing>      7 days ago      /bin/sh -c #(nop)  CMD ["python3"]              0B        
<missing>      7 days ago      /bin/sh -c set -ex;   savedAptMark="$(apt-ma…   8.49MB    
<missing>      7 days ago      /bin/sh -c #(nop)  ENV PYTHON_GET_PIP_SHA256…   0B        
<missing>      7 days ago      /bin/sh -c #(nop)  ENV PYTHON_GET_PIP_URL=ht…   0B        
<missing>      7 days ago      /bin/sh -c #(nop)  ENV PYTHON_PIP_VERSION=20…   0B        
<missing>      7 days ago      /bin/sh -c cd /usr/local/bin  && ln -s idle3…   32B       
<missing>      7 days ago      /bin/sh -c set -ex   && savedAptMark="$(apt-…   27.1MB    
<missing>      7 days ago      /bin/sh -c #(nop)  ENV PYTHON_VERSION=3.7.9     0B        
<missing>      7 days ago      /bin/sh -c #(nop)  ENV GPG_KEY=0D96DF4D4110E…   0B        
<missing>      7 days ago      /bin/sh -c set -eux;  apt-get update;  apt-g…   7.03MB    
<missing>      8 days ago      /bin/sh -c #(nop)  ENV LANG=C.UTF-8             0B        
<missing>      8 days ago      /bin/sh -c #(nop)  ENV PATH=/usr/local/bin:/…   0B        
<missing>      8 days ago      /bin/sh -c #(nop)  CMD ["bash"]                 0B        
<missing>      8 days ago      /bin/sh -c #(nop) ADD file:422aca8901ae3d869…   69.2MB

【问题讨论】:

  • ARG 的值作为环境变量对RUN 命令可见,因此如果ARG 发生变化,RUN 命令也需要重新运行。

标签: docker dockerfile


【解决方案1】:

docker docs有明确的解释,好吧,我粗心了。

https://docs.docker.com/engine/reference/builder/#impact-on-build-caching

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2022-01-19
    • 2019-07-06
    • 2019-12-30
    • 2023-03-05
    • 2017-05-26
    相关资源
    最近更新 更多