“ OSError:[Errno 8]执行格式错误”尝试在Docker容器中运行简单的Flask应用程序时 [英] "OSError: [Errno 8] Exec format error" when trying to run simple flask app in a docker container

查看:145
本文介绍了“ OSError:[Errno 8]执行格式错误”尝试在Docker容器中运行简单的Flask应用程序时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Docker容器中启动一个简单的Flask Hello world应用程序,但我不断收到此错误: OSError:[Errno 8] Exec格式错误:'/ app / app.py'



我的主机操作系统是Windows 10。



我的Dockerfile:

 从python:3.6 

ENV PYTHONBUFFERED 1

添加。 / app

WORKDIR / app

RUN pip install -r requirements.txt

我有Requirements.txt,其中Flask == 1.0.2。



app.py:


$ b从烧瓶导入烧瓶中获取的$ b

  Flask 
app = Flask(__ name__)

@ app.route( /)
def hello():
返回 Hello World!

如果__name__ =='__main__':
app.run(host ='0.0.0.0',port = 8000,debug = True)

和docker-compose.yml:

 版本: 3 

服务:
应用程序:
构建:。
命令:python app.py
端口:
- 8000:8000

容器的整个日志:

  app_1 | *正在投放Flask应用 app(延迟加载)
app_1 | *环境:生产
app_1 |警告:不要在生产环境中使用开发服务器。
app_1 |请改用生产WSGI服务器。
app_1 | *调试模式:在
app_1 | *在http://0.0.0.0:8000/上运行(按CTRL + C退出)
app_1 | *重新启动stat
app_1 |追溯(最近一次通话):
app_1 | < module>中的文件 app.py,第9行
app_1 | app.run(host ='0.0.0.0',port = 8000,debug = True)
app_1 |在运行
app_1中,文件 /usr/local/lib/python3.6/site-packages/flask/app.py第943行| run_simple(主机,端口,自我,**选项)
app_1 |在run_simple
app_1中的文件 /usr/local/lib/python3.6/site-packages/werkzeug/serving.py,行988。 run_with_reloader(内部,额外文件,reloader_interval,reloader_type)
app_1 |在run_with_reloader
app_1中的文件 /usr/local/lib/python3.6/site-packages/werkzeug/_reloader.py,第332行。 sys.exit(reloader.restart_with_reloader())
app_1 |文件 /usr/local/lib/python3.6/site-packages/werkzeug/_reloader.py,行176,位于restart_with_reloader
app_1 | exit_code = subprocess.call(args,env = new_environ,close_fds = False)
app_1 |调用
app_1 |中的文件 /usr/local/lib/python3.6/subprocess.py,第287行。使用Popen(* popenargs,** kwargs)as p:
app_1 | __init__
app_1中的文件 /usr/local/lib/python3.6/subprocess.py,第729行。 restore_signals,start_new_session)
app_1 | _execute_child
app_1中的文件 /usr/local/lib/python3.6/subprocess.py,行1364。引发child_exception_type(errno_num,err_msg,err_filename)
app_1 | OSError:[Errno 8]执行格式错误:'/app/app.py'
flaskdockerproject_app_1退出,代码为1

UPDATE



在我在app.py中添加了shebang之后,就像@larsks说的那样,我得到了这个错误:
FileNotFoundError:[ Errno 2]没有这样的文件或目录:'/app/app.py':'/app/app.py'。



所有文件都在容器中,在正确的位置。

解决方案

我遇到了同样的问题(Exec格式错误,如果添加了shebang,则为FileNotFound)。 / p>

在Dockerfile中添加 RUN chmod 644 app.py已为我修复,如下所述: https://github.com/pallets/werkzeug/issues/1482


I'm trying to start a simple Flask "Hello world" app in a docker container but I keep getting this error: "OSError: [Errno 8] Exec format error: '/app/app.py'"

My host operating system is Windows 10.

My Dockerfile:

FROM python:3.6

ENV PYTHONBUFFERED 1

ADD . /app

WORKDIR /app

RUN pip install -r requirements.txt

I have requirements.txt with Flask==1.0.2.

app.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)

and docker-compose.yml:

version: '3'

services:
  app:
    build: .
    command: python app.py
    ports:
      - "8000:8000"

Whole log of container:

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

UPDATE

After I added the shebang in app.py like @larsks said I'm getting this error: "FileNotFoundError: [Errno 2] No such file or directory: '/app/app.py': '/app/app.py'.

All the files are in the container and in the right place.

解决方案

I hit the same problem (Exec format error, then FileNotFound if I added the shebang).

Adding "RUN chmod 644 app.py" to the Dockerfile fixed it for me, as mentioned here: https://github.com/pallets/werkzeug/issues/1482

这篇关于“ OSError:[Errno 8]执行格式错误”尝试在Docker容器中运行简单的Flask应用程序时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆