gpt4 book ai didi

docker - 为什么我的 Docker 缓存会被这个 COPY 命令失效?

转载 作者:行者123 更新时间:2023-12-04 22:28:00 25 4
gpt4 key购买 nike

我在 CI 系统中的 docker builder 在不事件后被破坏,从而丢失了本地缓存。我正在使用 --cache-from首先从 quay.io 存储库中提取最新的图像,然后将其用作 --cache-from在下一个构建中。
我正在运行 docker 版本 17.12.0-ce .
Dockerfile(对于相关部分)如下所示:

FROM ubuntu:16.04
RUN apt-get update && apt-get install -y \
ant \
build-essential \
software-properties-common \
libncurses5-dev \
libncursesw5-dev \
libcurl4-openssl-dev \
libboost-dev \
libfreetype6-dev \
zlib1g-dev \
r-base \
default-jdk \
python-dev \
python-setuptools \
python-pip \
python3-dev \
python3-setuptools \
python3-pip \
git \
wget \
unzip \
ghostscript \
pkg-config


RUN mkdir /software
WORKDIR /software
ENV PATH="/software:${PATH}"

RUN git clone --branch v0.2.19 --single-branch
https://github.com/xianyi/OpenBLAS
RUN cd OpenBLAS && make FC=gfortran TARGET=NEHALEM USE_THREAD=0 && make
PREFIX=/opt/openblas install
ENV LD_LIBRARY_PATH="/opt/openblas/lib:${LD_LIBRARY_PATH}"

# Install samtools dependencies
RUN wget http://zlib.net/zlib-1.2.11.tar.gz && tar -xvf zlib-1.2.11.tar.gz
RUN cd zlib-1.2.11 && ./configure && make && make install
RUN wget http://bzip.org/1.0.6/bzip2-1.0.6.tar.gz && tar -xvf bzip2-
1.0.6.tar.gz
RUN cd bzip2-1.0.6 && make && make install
RUN wget https://tukaani.org/xz/xz-5.2.3.tar.gz && tar -xvf xz-5.2.3.tar.gz
RUN cd xz-5.2.3 && ./configure && make && make install

RUN pip install common python-dateutil cython

RUN pip3 install common python-dateutil cython

# Install numpy 1.11.3 (python2/3)
RUN git clone --branch v1.11.3 --single-branch https://github.com/numpy/numpy
COPY /docker_image/site.cfg numpy/
RUN cd numpy && python setup.py install
RUN cd numpy && python3 setup.py install

当我使用(干净的机器,缓存中没有任何内容)运行我的构建时:
docker pull quay.io/myorganization/myimage:tag

然后运行构建
docker build --cache-from=quay.io/myorganization/myimage:tag -f docker_image/Dockerfile -t quay.io/myorganization/myimage:newtag .

构建使用缓存直到 COPY /docker_image/site.cfg numpy/使缓存无效。我的 .dockerignore 看起来像:
.git*

所以事情发生变化应该不是问题。如果我不小心遗漏了一些需要的重要信息,请询问,我会及时提供。任何关于可能导致此特定位置缓存失效的想法都将受到高度赞赏。

编辑:即使我在构建之间没有更改 repo 中的任何内容,也会发生此缓存失效,方法是执行以下操作:使用 tag1 构建图像,推送图像
到 quay.io,然后在干净的机器上克隆 git repo,拉取镜像 (tag1),使用 tag2 构建镜像。 numpy repo 元数据会发生变化吗? (注意:--single-branch 不应该,据我所知,提取有关该 repo 中其他分支的任何信息)。

最佳答案

COPY 的 docker 缓存或 ADD命令使用文件和目录的散列。该散列中包含每个文件的内容,甚至文件的权限。因此,如果这些中的任何一个改变了一个字节,哈希值就会不同,并且 docker 会出现缓存未命中,从而迫使该行重新运行。

从第一次缓存未命中开始,所有剩余的行都需要重新构建,因为前一层现在是新的并且尚未用于运行以下任何步骤。

关于docker - 为什么我的 Docker 缓存会被这个 COPY 命令失效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48551953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com