【问题标题】:Base image satisfies tensorflow version but docker still downloads tensorflow from requirements.txt基础镜像满足 tensorflow 版本但 docker 仍然从 requirements.txt 下载 tensorflow
【发布时间】:2020-08-21 20:46:42
【问题描述】:

我有一个 Dockerfile 如下:

FROM tensorflow/tensorflow:1.13.2-gpu-py3
COPY src/ /

WORKDIR /Mask_RCNN
RUN pip install --upgrade pip setuptools wheel
RUN pip install -r requirements.txt
RUN pip install .
RUN pip install slidingwindow

ENTRYPOINT ["python3","/Mask_RCNN/inference_docker.py"]

还有这样的需求文件:

numpy
scipy
Pillow
cython
matplotlib
tensorflow>=1.3.0
scikit-image
opencv-python
h5py
imgaug
IPython[all]

所以拉动tf 1.13.2 满足tensorflow>=1.3.0 但在创建映像时,docker 会尝试下载最新的tf=2.3,如requirements.txt 所示。但是,这种行为破坏了我的代码,因为它只能在 tf>1.3 and tf<2 上运行。我应该通过删除tensorflow>=1.3.0 来修改requirements.txt,还是有任何命令可以避免这种冲突?

【问题讨论】:

  • 但是它确实破坏了我的代码,因为它只能在 tf>1.3 and tf<2 上运行。我应该通过删除tensorflow>=1.3.0 来修改requirements.txt,还是有任何命令可以避免这种冲突? 除非我遗漏了一些东西,否则你不能在requirements.txt 中添加上限吗?
  • 即使我包含一个上限,它仍然会寻找最新的1.x,即1.15。我想要一种行为,比如如果基础图像提供了需求中的一个项目,那么需求中的那个项目根本不会pip install
  • 你能分享你在文件中使用的确切边界吗?
  • @AMC 根据您的要求添加。
  • 你是如何为版本 2.* 添加限制的?

标签: python docker tensorflow dockerfile


【解决方案1】:

如果您查看 Tensorflow 上的 DockerFile,您会发现 Tensorflow Docker 映像是由 installing Tensorflow by pip 在 Ubuntu 之上构建的。如果您使用更高版本(例如 TensorFlow >=1.3)重新安装 TensorFlow。它将为您下载最新版本,即 tensorflow 2.3。因此,要么从您的需求文件中删除 tensorflow,否则它将始终被最新版本覆盖。

【讨论】:

  • 我知道它会尝试下载最新版本,但为什么呢?它不应该简单地检查 tf 1.13 是否已经预装并且它大于 1.3,然后避免在第一手修改 tensorflow 吗?
  • 这是因为 pip 会这样解析包。你可能需要经常降级、升级包,所以你的逻辑对于 PyPI 的人来说并不总是容易实现的。我不知道 pip 后端到底发生了什么
猜你喜欢
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 2020-02-26
相关资源
最近更新 更多