当前位置: 首页 > 面试题库 >

Docker仅在发生更改时如何运行pip requirements.txt?

邓嘉致
2023-03-14
问题内容

在Dockerfile中,我有一个要安装的层requirements.txt

FROM python:2.7
RUN pip install -r requirements.txt

当我构建Docker映像时, 无论 对该文件进行任何更改,它都会运行整个过程。

如何确保仅pip install -r requirements.txt在文件发生更改的情况下运行Docker ?

Removing intermediate container f98c845d0f05
Step 3 : RUN pip install -r requirements.txt
 ---> Running in 8ceb63abaef6
Collecting https://github.com/tomchristie/django-rest-framework/archive/master.zip (from -r requirements.txt (line 30))
  Downloading https://github.com/tomchristie/django-rest-framework/archive/master.zip
Collecting Django==1.8.7 (from -r requirements.txt (line 1))

问题答案:

我假设在构建过程中的某个时候,您正在使用COPY或将整个应用程序复制到Docker映像中ADD

COPY . /opt/app
WORKDIR /opt/app
RUN pip install -r requirements.txt

问题在于,每次将整个应用程序复制到映像时,您都会使Docker构建缓存无效。这还将使所有后续构建步骤的缓存无效。

为防止这种情况,建议在将整个应用程序添加到映像之前,在单独的构建步骤中 requirements.txt复制文件:

COPY requirements.txt /opt/app/requirements.txt
WORKDIR /opt/app
RUN pip install -r requirements.txt
COPY . /opt/app
# continue as before...

由于需求文件本身可能很少变化,因此您可以使用缓存的层,直到将应用程序代码添加到映像中为止。



 类似资料:
  • 我是新来的Laravel我想做的只是如下: 我的表单中有一些字段,如标题、描述。 标题字段在数据库中是唯一的。 这就是我所做的来更新我的价值观。 但这将导致错误(该值已经存在),因为我的标题字段是唯一的。 我只想在标题值更改时更新标题,否则更新相同的值,但更新其他字段。谢谢

  • 我已经使用SLF4j作为日志框架,由log4j支持。我的问题是,我正在寻找一种在运行时更改记录器日志记录级别的方法。 我知道slf4j不允许通过自己的API直接进行此操作,因此,我必须直接访问日志提供程序。就个人而言,我发现这是slf4j中的一个巨大缺陷。所以现在我的问题是,如何通过slf4j以编程方式确定我使用的是哪种提供者?使用slf4j的最大目的是让您变得与提供商无关-您可以轻松地在您喜欢的

  • 如何在运行时更改application.yaml的值?例如,我有一个服务器地址属性,希望在运行时更改

  • 问题内容: 我有一个Android应用程序,当用户点击时,我想应用定义的样式。 我以为找到一个,但它不存在。我试过了 但它不起作用。 问题答案: 我通过创建一个新的XML文件来做到这一点,如下所示: 我的文件中也有一个条目,如下所示: 然后,在我的代码中,我创建了一个来捕获该上的tap事件: 编辑: 自API 23起,不建议使用 要改回它,你可以使用以下命令:

  • 问题内容: 我需要以固定的间隔运行批处理作业,并且能够在运行时更改此批处理作业的时间。为此,我遇到了Spring框架下提供的@Scheduled注释。但是我不确定如何在运行时更改fixedDelay的值。我进行了一些谷歌搜索,但没有发现任何有用的信息。 问题答案: 在spring启动中,你可以直接使用应用程序属性! 例如: 请注意,如果未定义属性,你还可以具有默认值,例如,默认值为“ 60”(秒)