Facing this error : container_linux.go:367: starting container process caused: exec: "python": executable file not found in $PATH: unknown

Facing this error : container_linux.go:367: starting container process caused: exec: "python": executable file not found in $PATH: unknown

所以我是 docker 和容器的初学者,几天来我一直收到此错误。 当我的 lambda 函数 运行 是 sagemaker 处理作业时,我收到此错误。 我的核心 python 文件位于 s3 存储桶中。 我的 docker 图像驻留在 ECR 中。 但是我不明白为什么当我 运行 使用 python docker 图像进行相同的处理作业时我没有得到类似的错误。 PFB 没有抛出任何错误的 python docker 文件。

FROM python:latest
#installing dependencies
RUN pip3 install argparse
RUN pip3 install boto3
RUN pip3 install numpy
RUN pip3 install scipy
RUN pip3 install pandas
RUN pip3 install scikit-learn
RUN pip3 install matplotlib

只有当我 运行 使用安装了 python3 的 ubunutu docker 映像时才会出现此错误。 PFB 引发上述错误的 docker 文件。

FROM ubuntu:20.04

RUN apt-get update -y
RUN apt-get install -y python3
RUN apt-get install -y python3-pip

RUN pip3 install argparse
RUN pip3 install boto3
RUN pip3 install numpy==1.19.1
RUN pip3 install scipy
RUN pip3 install pandas
RUN pip3 install scikit-learn

ENTRYPOINT [ "python3" ]

我该如何解决这个问题?

好问题。相信我,你已经通过自我分析解决了50%的问题。

你看,当你为 Python 使用官方 Docker 图片时,你的 Docker文件基于预定义图像构建;在这种情况下是 Python 图片(或者,假设您正在使用自己的自定义 commands/layers 扩展该基本图片)。由于它使用现有的 Python 图像,因此它也会选择所有预定义的环境变量。

而当您使用 Ubuntu Docker 图像 时,即使您按照所有正确的步骤安装依赖项,每个 layer 的 Docker 文件在中间容器中运行(想象孤立的独立外壳),并且无法将 $PATH 设置为 Python 垃圾箱。

解决方法:

为您的 Docker 文件使用确定性 Python 基础图像。您可以通过将 FROM 层中的 latest 替换为特定版本的 Python 图像来实现。这是更好的做法。

但是,如果您热衷于使用 Ubuntu 图像,只需为 ENV 添加一个 Docker 层并提及 Python 库路径。一旦您自己的 Docker 图像准备就绪,您的容器将注册它以备将来使用。

可以参考官方Docker文档here。搜索 ENV。 如果您有更多问题,请告诉我。

通过将入口点更改为

修复了此错误

入口点 [ "/usr/bin/python3.8"]