docker - 尝试在 docker 容器中运行简单的烧瓶应用程序时出现“OSError:[Errno 8] Exec 格式错误”
问题描述
我正在尝试在 docker 容器中启动一个简单的 Flask“Hello world”应用程序,但我不断收到此错误:“OSError: [Errno 8] Exec format error: '/app/app.py'”
我的主机操作系统是 Windows 10。
我的 Dockerfile:
FROM python:3.6
ENV PYTHONBUFFERED 1
ADD . /app
WORKDIR /app
RUN pip install -r requirements.txt
我有 Flask==1.0.2 的 requirements.txt。
应用程序.py:
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=8000, debug=True)
和 docker-compose.yml:
version: '3'
services:
app:
build: .
command: python app.py
ports:
- "8000:8000"
容器的整个日志:
app_1 | * Serving Flask app "app" (lazy loading)
app_1 | * Environment: production
app_1 | WARNING: Do not use the development server in a production environment.
app_1 | Use a production WSGI server instead.
app_1 | * Debug mode: on
app_1 | * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)
app_1 | * Restarting with stat
app_1 | Traceback (most recent call last):
app_1 | File "app.py", line 9, in <module>
app_1 | app.run(host='0.0.0.0', port=8000, debug=True)
app_1 | File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 943, in run
app_1 | run_simple(host, port, self, **options)
app_1 | File "/usr/local/lib/python3.6/site-packages/werkzeug/serving.py", line 988, in run_simple
app_1 | run_with_reloader(inner, extra_files, reloader_interval, reloader_type)
app_1 | File "/usr/local/lib/python3.6/site-packages/werkzeug/_reloader.py", line 332, in run_with_reloader
app_1 | sys.exit(reloader.restart_with_reloader())
app_1 | File "/usr/local/lib/python3.6/site-packages/werkzeug/_reloader.py", line 176, in restart_with_reloader
app_1 | exit_code = subprocess.call(args, env=new_environ, close_fds=False)
app_1 | File "/usr/local/lib/python3.6/subprocess.py", line 287, in call
app_1 | with Popen(*popenargs, **kwargs) as p:
app_1 | File "/usr/local/lib/python3.6/subprocess.py", line 729, in __init__
app_1 | restore_signals, start_new_session)
app_1 | File "/usr/local/lib/python3.6/subprocess.py", line 1364, in _execute_child
app_1 | raise child_exception_type(errno_num, err_msg, err_filename)
app_1 | OSError: [Errno 8] Exec format error: '/app/app.py'
flaskdockerproject_app_1 exited with code 1
更新
在我在 app.py 中添加 shebang 之后,就像@larsks 说的那样,我收到了这个错误:“FileNotFoundError: [Errno 2] No such file or directory: '/app/app.py': '/app/app.py' .
所有文件都在容器中并且在正确的位置。
解决方案
我遇到了同样的问题(执行格式错误,如果我添加了 shebang,则为 FileNotFound)。
将“RUN chmod 644 app.py”添加到 Dockerfile 为我修复了它,如此处所述:https ://github.com/pallets/werkzeug/issues/1482
推荐阅读
- oracle - 使用 PL/SQL-UTL_HTTP 代码将 PDF 文件发送到电报
- python - 是否有一种 SQL 语法可以通过基于同一张表中第三列的相等值在 2 列中搜索来创建新列?
- sql - 在插入语句中使用 OUTPUT 时,如果您在 select 中指定 order by,它是否遵守 select 中指定的顺序?
- javascript - 如何从包含多个 URL 的字符串中正确隔离和存储 Google 文件 ID?
- javascript - 图像 onLoad 处理程序从未在 Jest 中调用
- ab-initio - 从头算图到 Java 的转换
- html - 我没有得到下拉菜单
- vb.net - Is there a way to change the text displayed in a DatePicker? Instead of "Select a date", show something else?
- ios - 如何解决 No + [RCTConvert AIR MapCoordinate Array] 错误:找到函数。在 iOS 上反应原生地图
- azure-active-directory - AzureAd 组和用户的 Webhook 订阅不起作用