0

我正在 GitHub Actions 工作流程中构建 Docker 容器,并且我有一个使用Docker buildx的自定义缓存解决方案。本质上,我使用docker buildx 构建 --cache-from--cache-to参数来转储上一次构建的缓存,将其存储在外部,然后为下一次构建加载它以节省时间。

在大多数情况下,这工作得很好。大部分构建时间都花在了pip install我们使用 Alpine 并且没有可用的轮子上,因此它必须构建包,因此使用缓存跳过这一步可以节省大量资金。

Dockerfile 中有两个相关的行:

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

不过,我遇到了这个奇怪的问题, whererequirements.txt没有改变,第一行 (the COPY) 正确使用缓存,但第二行 (the RUN) 不使用缓存,并继续重新构建所有包。

我无法弄清楚是什么原因造成的。如果COPY正确使用缓存,那么它必须识别出requirements.txt没有改变,如果requirements.txt没有改变,我不明白为什么它不会为RUN命令使用缓存。

最糟糕的是,它是间歇性的。一些构建它使用缓存,一些构建它重新构建包,在这两种情况下requirements.txt(或任何前面的 Dockerfile 行)都没有改变。

我错过了什么吗?

4

0 回答 0