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

时间:2017-05-10 09:24:39

标签: docker pip 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"]

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

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

(关于这一点的'理论'是/scraper/requirements.txt本身没有改变,/scraper目录有,这使得RUN指令必须'重新运行';在这种情况下,将requirements.txt移动到另一个目录可能会有所帮助。但我无法从https://docs.docker.com/engine/reference/builder/#run验证这个'理论'是否正确。

1 个答案:

答案 0 :(得分:2)

这个问题Docker how to run pip requirements.txt only if there was a change?似乎与我的情况有关。每次修改代码时,我都会使Docker构建缓存失效,即使requirements.txt未更改。因此,为避免每次都重新运行pip install,建议COPY requirements.txtRUN pip install -r requirements.txt分别执行data Quad a = Quad a a a a instance (Show a) => Show (Quad a) where show (Quad a b c d) = (show a) ++ " " ++ -- code continues for printing