每次修改代码时如何防止Docker重新运行pip安装

Kur*_*eek 2 pip docker dockerfile

我有一个带有以下内容的刮刀Dockerfile

# Adapted from trcook/docker-scrapy
FROM python:alpine
RUN apk --update add libxml2-dev libxslt-dev libffi-dev gcc musl-dev libgcc openssl-dev
COPY . /scraper
RUN pip install -r /scraper/requirements.txt
WORKDIR /scraper/apkmirror_scraper
CMD ["scrapy", "crawl", "apkmirror"]
Run Code Online (Sandbox Code Playgroud)

刮板的代码位于 中/scraper/apkmirror_scraper,要求位于 中scraper/requirements.txt。我注意到每次修改代码并构建图像时,它都会重新运行pip install -r requirements.txt而不是使用本地缓存。

如何防止这种情况并使其使用本地缓存?

(关于此的一个“理论”是,虽然/scraper/requirements.txt它本身没有改变,但/scraper目录已经改变,这使得RUN指令必须“重新运行”;在这种情况下,它可能有助于移动requirements.txt到不同的目录。我无法然而,从https://docs.docker.com/engine/reference/builder/#run验证这个“理论”是否正确)。

Kur*_*eek 5

这个问题,Docker如何只在有变化的情况下运行pip requirements.txt?,似乎与我的情况有关。每次我修改代码时,我都会使 Docker 构建缓存失效,即使requirements.txt它没有改变。所以为了避免pip install每次都重新运行s,建议在单独的步骤中COPY执行requirements.txtRUN pip install -r requirements.txt

  • 没有帮助。如果我在requirements.txt中添加一个新库,它仍在运行pip install。我希望它只安装新库。 (7认同)