【问题标题】:Facing this error : container_linux.go:367: starting container process caused: exec: "python": executable file not found in $PATH: unknown面对这个错误:container_linux.go:367:启动容器进程导致:exec:“python”:在 $PATH 中找不到可执行文件:未知
【发布时间】:2021-08-17 01:43:47
【问题描述】:

所以我是 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" ]

我该如何解决这个问题?

【问题讨论】:

    标签: python amazon-web-services docker aws-lambda amazon-sagemaker


    【解决方案1】:

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

    您会看到,当您使用 Python 的官方 Docker 映像时,您的 Dockerfile 是建立在 预定义 映像上的;在这种情况下是一个 Python 图像(或者,想象一下您正在使用自己的自定义命令/层扩展该基础图像)。由于它使用现有的 Python 映像,因此它还会获取所有预定义的环境变量。

    而当您使用 Ubuntu Docker 映像 时,即使您通过安装依赖项遵循了所有正确的步骤,Dockerfile 的每个 都在中间容器中运行(想象孤立的独立外壳),并且无法将 $PATH 设置为 Python 箱。

    解决方案:

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

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

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

    【讨论】:

    • 我从 python 镜像转移到 ubuntu 的原因是因为 python 镜像在 ECR 存储库中扫描时存在几个严重漏洞,而 ubuntu 的中型 CVE 较少。在此之前我使用的是 python 3.7 slim buster 图像,一切正常。但是我一直在尝试各种方法来解决这个问题,但我最终遇到了同样的错误。我浏览了您共享的文档,但我不太了解。你能给我一个在 dockerfile 中使用 ENV 变量的例子吗?提到 ENV,ubuntu dockerfile 会是什么样子?
    • 好的。您可以尝试 Snyk 的 Docker Image advisor/scanner,因为它可以建议具有较少漏洞的替代镜像。就 ENV 变量而言,您可以点击此链接 link,它很好地解释了它。您需要做的就是查看您的 Python 通常安装在哪里,并将其添加到您的路径中。您还可以使用 RUN 将路径导出回 bash shell。或者您可以将预期的 Python 路径添加到您的 ENTRYPOINT 层,尽管这只是完全修复它的一步。
    • 感谢您的精彩见解。我通过将入口点更改为 ENTRYPOINT [ "/usr/bin/python3.8"] 来修复它
    • @rishabajain445 太好了!
    • 我已将我的 python 文件移动到 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 RUN pip3 install matplotlib ADD core.py /opt/ml/processing/code/core.py ENTRYPOINT [ "/usr/bin/python3.8"] - 这是我更新的 dockerfile
    【解决方案2】:

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

    入口点[“/usr/bin/python3.8”]

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      • 2020-05-13
      • 2018-11-18
      • 1970-01-01
      相关资源
      最近更新 更多