我正在使用nvidia/cudagl:11.4.2-base-ubuntu20.04 ,其中不包括 python。这对我来说没问题,因为无论如何我都需要一个非常具体的 python 版本(3.9.9)。一种方法应该是自己编译 python (例如根据 https://askubuntu.com/a/890959 )。但是,我想也许我可以使用多阶段构建,只需从 python:3.9.9-slim 复制所需的 python 可执行文件即可。 ,这样我就不必处理编译及其残余部分。
这是一个可行的想法吗?到底需要复制什么?
最佳答案
将已安装的二进制文件从一个镜像复制到另一个镜像实际上不太可行。如果您知道该应用程序只是一个静态二进制文件,或者您知道它具有非常受控的库依赖项,那么它可以工作,但是Python将东西安装在许多不同的目录中并包含其自己的库树。使用分发包管理器来安装所需的特定 Python 版本会更好。
由于您的基础镜像基于 Ubuntu,因此有一个 add-on Ubuntu repository包含许多不同的Python版本;另请参阅 Python 3.7 on Ubuntu 20.04 。将该答案转换为 Dockerfile 格式,您会得到如下内容:
FROM nvidia/cudagl:11.4.2-base-ubuntu20.04
...
# USER root (if you're not already root)
RUN apt-add-repository ppa:deadsnakes/ppa \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get install --no-install-recommends --assume-yes \
python3.9
在撰写本文时,包括 Python 3.9.10 而不是 3.9.9,但这对您来说应该不会有显着差异。
关于python - 如何在多阶段 docker 构建期间将 python 从一个阶段复制到另一个阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71053803/