如何在docker容器中安装不同的python版本

Que*_*XDD 4 python docker pyspark

我在我的机器内安装了gettyimages/spark dockerimage 和。jupyter/pyspark-notebook

但是由于gettyimage/sparkpython 版本为 ,3.5.3jupyter/pyspark-notebookpython 版本为3.7,会出现以下错误:

例外:worker 中的 Python 版本 3.5 与驱动程序 3.7 中的版本不同,PySpark 无法使用不同的次要版本运行。请检查环境变量 PYSPARK_PYTHON 和 PYSPARK_DRIVER_PYTHON 是否设置正确。

因此,我尝试升级gettyimage/spark镜像的 python 版本或降级 docker 镜像的 python 版本jupyter/pyspark-notebook来修复它。

  • 先说方法一,jupyter/pyspark-notebook先降级python版本:

我用来conda install python=3.5降级docker镜像的python版本 jupyter/pyspark-notebook。然而,在我这样做之后,我的jupyter笔记本无法连接到任何单机ipynb,并且内核似乎已死。另外,当我conda再次输入时,它显示了我conda command not found,但是 python 终端运行良好

我比较了降级之前和之后的 sys.path

['','/usr/local/spark/python','/usr/local/spark/python/lib/py4j-0.10.7-src.zip','/opt/conda/lib/python35.zip' , '/opt/conda/lib/python3.5', '/opt/conda/lib/python3.5/plat-linux', '/opt/conda/lib/python3.5/lib-dynload', '/ opt/conda/lib/python3.5/site-packages']

['','/usr/local/spark/python','/usr/local/spark/python/lib/py4j-0.10.7-src.zip','/opt/conda/lib/python37.zip' ,'/opt/conda/lib/python3.7','/opt/conda/lib/python3.7/lib-dynload','/opt/conda/lib/python3.7/site-packages']

我认为或多或少是正确的。那么为什么我无法使用我的jupyter笔记本电脑连接到狗舍呢?

  • 所以我使用另一种方法,我尝试升级gettyimage/spark图像

sudo docker run -it gettyimages/spark:2.4.1-hadoop-3.0 apt-get install python3.7.3 ; python3-v

然而,我发现即使我这样做,我也无法很好地运行火花。

我不太确定该怎么办。可以分享一下如何修改docker images内部包版本吗

Abh*_*pta 6

如果我查看此处的Dockerfile ,它会python3默认安装 python 3.5 debian:stretch。您可以通过编辑 Dockerfile 并自行构建来安装 python 3.7。在 Dockerfile 中,删除第 19-25 行并将第 1 行替换为以下内容,然后在本地构建映像。

FROM python:3.7-stretch
Run Code Online (Sandbox Code Playgroud)

如果您不熟悉构建自己的映像,请下载Dockerfile并将其保存在自己的独立目录中。然后cd进入目录后,运行以下命令。您可能需要首先删除已下载的图像。之后,您应该能够以与从 docker hub 提取映像相同的方式运行其他 docker 命令。

docker build -t gettyimages/spark .
Run Code Online (Sandbox Code Playgroud)