运行dockerized Hello world python示例时执行格式错误 - python

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

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

require.txt文件仅包含要安装的库名称(烧瓶)。

而运行dockerized映像时出现的错误是

我对docker和python都是全新的。所以请帮我...提前谢谢

参考方案

我之前已经看过这种模式,所以我很确定错误消息的含义,但是在这种情况下,我不知道为什么。似乎正在发生的事情是Flask会自行重新启动,但是最初的执行是通过python ./index.py开始的,重新启动就是在执行/app/index.py。它试图处理最初要执行的Python文件python的第一个输入参数,就像它可以直接执行一样。错误是说不是。如果在该文件的顶部放置一个之类的shebang行,并使其可执行,则它可能会开始为您工作。但是您不必这样做。这里的设置应该可以正常工作。

所以我用Google搜索了一下,这似乎是结合了werkzeug(Flask使用的一个库),Docker和Windows的一个已知问题:

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

由于我不在Windows上,因此我将其留给OP或其他人从这里获取。

如何将python文件转换为linux可执行文件 - python

                                我使用python 2.7,我想知道如何将python代码更改为linux可执行文件,这与使用gcc -o hello hello.c非常相似,但使用python 参考方案 您通常不会。而是在文件中添加一个所谓的shebang,然后更改标志以使其可执行。所以第一行应该是这样的#!/usr/bin…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…

Python:传递记录器是个好主意吗? - python

我的Web服务器的API日志如下:started started succeeded failed 那是同时收到的两个请求。很难说哪一个成功或失败。为了彼此分离请求,我为每个请求创建了一个随机数,并将其用作记录器的名称logger = logging.getLogger(random_number) 日志变成[111] started [222] start…

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…