当通过docker-compose运行时,Flask CLI抛出'OSError: [Errno 8] Exec format error'的错误。

9 浏览
0 Comments

当通过docker-compose运行时,Flask CLI抛出'OSError: [Errno 8] Exec format error'的错误。

我正在运行一个带有自定义脚本的Flask应用程序。无论如何,我正在尝试这样做。

我使用Windows 10,并且该应用程序应该在linux Docker容器中运行,命令如下:

docker-compose up api

Docker-compose的版本是1.23.2。在dockerfile中,api服务通过以下命令运行:

command: python manage.py run --host "0.0.0.0" --with-threads

在尝试启动时,我看到了以下异常:

OSError: [Errno 8] Exec format error: '/api/manage.py'

起初我认为这可能是可怕的Windows行尾符问题,但是在所有源文件上运行dos2unix并没有解决这个问题。

我该如何避免这个错误?


manage.py

    import click
    from flask.cli import FlaskGroup
    from my_app_api import create_app
    def create_my_app(info):
        return create_app()
    @click.group(cls=FlaskGroup, create_app=create_my_app)
    def cli():
        pass
    if __name__ == "__main__":
        cli()

完整的回溯信息

api_1          | Traceback (most recent call last):
api_1          |   File "manage.py", line 22, in 
api_1          |     cli()
api_1          |   File "/usr/local/lib/python3.6/site-packages/click/core.py", line 764, in __call__
api_1          |     return self.main(*args, **kwargs)
api_1          |   File "/usr/local/lib/python3.6/site-packages/flask/cli.py", line 380, in main
api_1          |     return AppGroup.main(self, *args, **kwargs)
api_1          |   File "/usr/local/lib/python3.6/site-packages/click/core.py", line 717, in main
api_1          |     rv = self.invoke(ctx)
api_1          |   File "/usr/local/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
api_1          |     return _process_result(sub_ctx.command.invoke(sub_ctx))
api_1          |   File "/usr/local/lib/python3.6/site-packages/click/core.py", line 956, in invoke
api_1          |     return ctx.invoke(self.callback, **ctx.params)
api_1          |   File "/usr/local/lib/python3.6/site-packages/click/core.py", line 555, in invoke
api_1          |     return callback(*args, **kwargs)
api_1          |   File "/usr/local/lib/python3.6/site-packages/click/decorators.py", line 64, in new_func
api_1          |     return ctx.invoke(f, obj, *args, **kwargs)
api_1          |   File "/usr/local/lib/python3.6/site-packages/click/core.py", line 555, in invoke
api_1          |     return callback(*args, **kwargs)
api_1          |   File "/usr/local/lib/python3.6/site-packages/flask/cli.py", line 438, in run_command
api_1          |     use_debugger=debugger, threaded=with_threads)
api_1          |   File "/usr/local/lib/python3.6/site-packages/werkzeug/serving.py", line 988, in run_simple
api_1          |     run_with_reloader(inner, extra_files, reloader_interval, reloader_type)
api_1          |   File "/usr/local/lib/python3.6/site-packages/werkzeug/_reloader.py", line 332, in run_with_reloader
api_1          |     sys.exit(reloader.restart_with_reloader())
api_1          |   File "/usr/local/lib/python3.6/site-packages/werkzeug/_reloader.py", line 176, in restart_with_reloader
api_1          |     exit_code = subprocess.call(args, env=new_environ, close_fds=False)
api_1          |   File "/usr/local/lib/python3.6/subprocess.py", line 287, in call
api_1          |     with Popen(*popenargs, **kwargs) as p:
api_1          |   File "/usr/local/lib/python3.6/subprocess.py", line 729, in __init__
api_1          |     restore_signals, start_new_session)
api_1          |   File "/usr/local/lib/python3.6/subprocess.py", line 1364, in _execute_child
api_1          |     raise child_exception_type(errno_num, err_msg, err_filename)
api_1          | OSError: [Errno 8] Exec format error: '/api/manage.py'

0