Docker映像默认为python 3.6,即使我安装了python 3.7

Docker映像默认为python 3.6,即使我安装了python 3.7,python,docker,dockerfile,Python,Docker,Dockerfile,我正在尝试建立一个基于Ubuntu18.04的Docker映像,它运行一些Python 3.7代码 dockerfile特别提到安装Python3.7,但在image binary文件夹中还有一个Python3.6,图像使用它作为默认值,我甚至不需要它 为了在图像上只显示python 3.7,我需要做什么更改 dockerfile当前看起来如下所示: FROM ubuntu:18.04 #format changes required for asammdf v3.4.0 ENV LANG C

我正在尝试建立一个基于Ubuntu18.04的Docker映像,它运行一些Python 3.7代码

dockerfile特别提到安装Python3.7,但在image binary文件夹中还有一个Python3.6,图像使用它作为默认值,我甚至不需要它

为了在图像上只显示python 3.7,我需要做什么更改

dockerfile当前看起来如下所示:

FROM ubuntu:18.04

#format changes required for asammdf v3.4.0
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8

#install python 3.7 and pip
RUN apt-get update && apt-get install -y \
    python3.7 \
    python3-pip

#set main entry point as working directory
WORKDIR /

RUN pip3 install --upgrade setuptools

RUN alias python3=/usr/bin/python3.7
RUN pip3 install -r requirements.txt

稍后详情:

添加了
alias
命令,希望它能正常工作,但在dockerfile中它似乎被忽略了,执行仍然会转到python3.6

requirements安装工作正常,但会在3.6目录中安装所有软件包,因此即使我在容器中手动使用python3.7执行,它也看不到已安装的模块

我建议使用包含您需要的所有内容的模块

docker run -it --rm --name my_python3.7 python:3.7-alpine3.9

您可以找到官方的Dockerfile

上图的好处是,您将在100 BM以下获得python3.7

更新:

因此,您可以将此图像用作Dockerfile中的基础图像

python:3.7-alpine3.9

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
.
.
.
我建议使用包含您需要的所有内容的

docker run -it --rm --name my_python3.7 python:3.7-alpine3.9

您可以找到官方的Dockerfile

上图的好处是,您将在100 BM以下获得python3.7

更新:

因此,您可以将此图像用作Dockerfile中的基础图像

python:3.7-alpine3.9

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
.
.
.

Ubuntu 18.04预装了Python 3.6。如何调用python二进制执行来运行代码? 尝试显式声明完整的python 3.7二进制路径以执行代码

/usr/lib/python3.7 myCode.py
这应该适用于ubuntu 18.04 我使用

whereis python3.7

不过,使用官方python映像会很有效。

Ubuntu18.04预装了python 3.6。如何调用python二进制执行来运行代码? 尝试显式声明完整的python 3.7二进制路径以执行代码

/usr/lib/python3.7 myCode.py
这应该适用于ubuntu 18.04 我使用

whereis python3.7


不过,使用官方python映像会很有效。

为什么不使用
python:3.7
作为基础映像?避免使用ubuntu18.04,它可能已经安装了一些默认的python版本。这实际上不是一个选项,它需要ubuntu18.04 Dockerfile中的
别名
命令将仅应用于它所在的
运行
行。每个
RUN
行都是一个新进程,而
alias
仅适用于当前进程。您需要一种更持久的方式来替换默认的Ubuntu Python 3安装,可能是使用符号链接或
备选方案
套件。这种方法有可能破坏依赖于Ubuntu提供的Python3.6的附带软件。您最好使用为Python 3.7构建的Docker映像(并且有更小的映像)。为什么不使用
Python:3.7
作为基础映像?避免使用ubuntu18.04,它可能已经安装了一些默认的Python版本。这不是一个真正的选项,它需要ubuntu18.04 Dockerfile中的
别名
命令将仅应用于它所在的
运行
行。每个
RUN
行都是一个新进程,而
alias
仅适用于当前进程。您需要一种更持久的方式来替换默认的Ubuntu Python 3安装,可能是使用符号链接或
备选方案
套件。这种方法有可能破坏依赖于Ubuntu提供的Python3.6的附带软件。您最好使用为Python 3.7构建的Docker映像(并且有更小的映像),这样就不会更改Docker文件了?@Andrei将ubuntu:18.04更改为
alpine:3.7-alpine3.9
@Andrei是的,您可以将其用作基础映像。更新答案这似乎造成的问题比解决的问题多。我有那些“apt”命令,我用“apk”替换了它们,但它不能满足其余的需求。感谢您的努力,尽管它不起作用,但您可以更新问题或询问其他问题,以便我们提供帮助。如果你想与docker合作很长一段时间,那么我建议你使用alpine。那么dockerfile没有改变吗?@Andrei将
ubuntu:18.04
更改为
alpine:3.7-alpine3.9
@Andrei是的,你可以将其用作基础图像。更新答案这似乎造成的问题比解决的问题多。我有那些“apt”命令,我用“apk”替换了它们,但它不能满足其余的需求。感谢您的努力,尽管它不起作用,但您可以更新问题或询问其他问题,以便我们提供帮助。如果你想长期使用docker,那么我建议你使用alpine。我在dockerfile中添加了一个命令
RUN alias python3=/usr/bin/python3.7
,但出于某些原因,它仍然默认为3.6。你应该使用
CMD alias python3=/usr/bin/python3.7
而不是
RUN
CMD
将在创建容器时执行该命令。我在dockerfile
中添加了一个命令运行别名python3=/usr/bin/python3.7
,但出于某些原因,它仍然默认为3.6。您应该使用
CMD别名python3=/usr/bin/python3.7
而不是
运行
CMD
将在创建容器时执行该命令。