Estou usando --mount=type=cache
o Dockerfile
PIP para armazenar em cache os pacotes entre as compilações, mas isso não parece afetar a velocidade da compilação. Eu esperava que o PIP reutilizasse os pacotes em cache e evitasse baixá-los novamente, mas cada compilação leva o mesmo tempo.
Aqui está a parte relevante do meu Dockerfile:
FROM python:3.13-slim AS compile-image
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
RUN pip install --no-cache-dir --upgrade pip
# Final image
FROM python:3.13-slim
ENV PATH="/opt/venv/bin:$PATH"
COPY --from=compile-image /opt/venv /opt/venv
WORKDIR /app
ENV HOME=/app
COPY . .
RUN --mount=type=cache,mode=0755,target=/root/.cache/pip \
pip install -e .
Este cache não deveria baixar pacotes e reutilizá-los em compilações subsequentes? Qual poderia ser o motivo de não estar funcionando como esperado?
O cache do PIP é relativo ao diretório inicial do usuário. Logo acima da
RUN pip install
linha que você definiuENV HOME=/app
, o cache do PIP está lá/app/.cache/pip
(você também vê esse diretório na mensagem de erro). Use esse diretório como o local do cache.Para a maioria dos propósitos em um contêiner, porém, "diretório inicial" não é um conceito especialmente significativo e não há motivo para alterá-lo. Se você não definir
$HOME
e estiver executando como root, o diretório inicial padrão será/root
e a invocação que você fez antes deverá funcionar.Você também pode usar esse cache em combinação com o cache de camadas normal do Docker. Você provavelmente desejará executar o
pip install
comando no primeiro estágio se tiver uma compilação de vários estágios (a configuração mostrada se beneficia pouco com isso) e, se puder fazê-lo apenas copiando opyproject.toml
arquivo primeiro, evitará executar novamente a sequência de instalação se os arquivos de origem, mas não as dependências do aplicativo, forem alterados.