我有一个带有以下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_scraper
,scraper/requirements.txt
中的要求。我注意到每次修改代码并构建映像时,它都会重新运行pip install -r requirements.txt
而不是使用本地缓存。
如何防止这种情况并使其使用本地缓存?
(关于这一点的'理论'是/scraper/requirements.txt
本身没有改变,/scraper
目录有,这使得RUN
指令必须'重新运行';在这种情况下,将requirements.txt
移动到另一个目录可能会有所帮助。但我无法从https://docs.docker.com/engine/reference/builder/#run验证这个'理论'是否正确。
答案 0 :(得分:2)
这个问题Docker how to run pip requirements.txt only if there was a change?似乎与我的情况有关。每次修改代码时,我都会使Docker构建缓存失效,即使requirements.txt
未更改。因此,为避免每次都重新运行pip install
,建议COPY
requirements.txt
和RUN 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
。