2

我使用这个 Dockerfile作为这个 docker compose file的一部分。

现在,每次我想添加新的 pip 要求时,我都会停止容器,添加新的 pip 要求,运行docker-compose -f local.yml build,然后使用docker-compose -f local.yml up. 这需要很长时间,如果我只是添加一个 pip 依赖项,它甚至看起来像是在为 Postgres 重新编译容器。

将单个 pip 依赖项添加到容器的最快方法是什么?

4

1 回答 1

4

这与 Docker 构建缓存失效的事实有关。当您编辑该requirements.txt步骤RUN pip install --no-cache-dir -r /requirements/production.txt时,Dockerfile 中的所有后续指令都将失效。因此他们被重新执行。

作为最佳实践,您应该尽可能避免使构建缓存失效。这是通过将经常更改的步骤移至 Dockerfile 的底部来实现的。您可以编辑 Dockerfile 并在开发时将单独的 pip 安装步骤添加到末尾。

...

USER django

WORKDIR /app

pip install --no-cache-dir <new package>
pip install --no-cache-dir <new package2>

...

一旦您确定所需的所有依赖项,请将它们添加到需求文件中。这样您就可以避免在早期使构建缓存失效,并且只构建从安装新软件包开始的步骤。

于 2018-01-25T11:23:19.943 回答