【问题标题】:Exec format Error while running dockerised Hello world python example运行 dockerised Hello world python 示例时执行格式错误
【发布时间】:2019-04-12 04:02:05
【问题描述】:

我正在尝试从基础学习 docker。在他们的官方文档中,他们演示了一个简单的 Hello world Python 应用程序。但是,如果我在 Windows 主机上尝试相同的操作,则会出现以下异常。我的hello world代码

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "Hello World!"
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=int("5000"), debug=True)

还有我的 docker 文件:

FROM python:alpine3.7
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
CMD python ./index.py

requirements.txt 文件只包含要安装的库名称(flask)。

我在运行 dockerised 映像时遇到的错误是

我对 docker 和 python 都是全新的。所以请帮帮我...在此先感谢

【问题讨论】:

  • 在 Linux 上使用 Docker 构建和运行代码没有错误。我怀疑这个问题与 windows/linux 交互有关。
  • 能否复制粘贴有问题的控制台输出
  • 你检查过答案in this related question
  • 感谢 arsho 添加 shebang 解决了问题...谢谢大家

标签: python docker flask


【解决方案1】:

我以前见过这种模式,所以我很确定错误消息的含义,但在这种情况下我想不出为什么。似乎正在发生的事情是 Flask 自行重新启动,但在最初的执行是从 python ./index.py 开始的地方,重新启动正在执行 /app/index.py。它试图将最初是 python 的第一个输入参数(要执行的 Python 文件)处理为直接可执行的。错误是说它不是。如果您在此文件的顶部放置一个 shebang 行,例如 #!/usr/bin/env python,并使其可执行,它可能会开始为您工作。但你不应该这样做。此处的设置应该可以正常工作。

所以我用 Google 搜索了一下,这似乎是 werkzeug(Flask 使用的库)、DockerWindows 的组合的已知问题强>:

https://github.com/pallets/werkzeug/issues/1482

由于我不在 Windows 上,我将把它留给 OP 或其他人从这里拿走。

【讨论】:

  • 嗨,正如你所说,在 d top app.py 上添加 #!/usr/bin/env python 解决了这个问题。但我不知道到底发生了什么。无论如何感谢你的帮助
  • 如果您认为这会对遇到类似问题的其他人有所帮助,请批准此答案。
猜你喜欢
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-22
  • 1970-01-01
相关资源
最近更新 更多