面对此错误:container_linux.go:367:启动容器进程导致:exec:"python":在$PATH中找不到可执行文件:未知



所以我是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引发上述错误的dockerfile。

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镜像时,您的Dockerfile是基于预定义的镜像构建的;在这种情况下是Python图像(或者,想象一下,您正在使用自己的自定义命令/层扩展基本图像(。当它使用现有的Python映像时,它还会拾取所有预定义的环境变量。

然而,当您使用Ubuntu Docker镜像时,即使您按照所有正确的步骤安装依赖项,Dockerfile的每个都在一个中间容器中运行(想象一下独立的shell(,并且无法将$PATH设置为Python bin。

解决方案:

为Dockerfile使用一个确定的Python基础映像。您可以通过将FROM层中的最新替换为特定版本的Python Image来完成此操作。这是一个更好的做法。

然而,如果您热衷于使用Ubuntu映像,只需为ENV添加一个Docker层,并提及Python-libs路径即可。一旦你自己的Docker镜像准备好,你的容器就会注册它以备将来使用。

你可以在这里参考官方的Docker文档。搜索ENV。如果你还有其他问题,请告诉我。

通过将入口点更改为修复了此错误

ENTRYPOINT["/usr/bin/python3.8"]

最新更新