当通过docker-compose运行时,Flask CLI抛出“ OSError:[Errno 8] Exec格式错误”

当通过docker-compose运行时,Flask CLI抛出“ OSError:[Errno 8] Exec格式错误”,第1张

当通过docker-compose运行时,Flask CLI抛出“ OSError:[Errno 8] Exec格式错误”

看起来您的 api / manage.py 没有 shebang
([Wikipedia]:Shebang(Unix)),因此默认(当前)命令处理器(
shell- 通常为 bash )正在尝试运行它,(显然)失败。

要解决此问题,请添加一个 shebang (在文件的开头,确保您的编辑器添加了以 Nix 样式结尾的行( n
0x0A
LF )):

  • 默认 Python 安装:

    #!/usr/bin/env python
    • 变体(明确指定 Python 3 ):
          #!/usr/bin/env python3
  • 自定义 Python 安装:

    #!/full/path/to/your/custom/python/executable

请注意,您还需要对该文件()具有 执行 权限

chmod +x api/manage.py

例:

>     [cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q055271912]>> ~/sopr.sh>     *** Set shorter prompt to better fit when pasted in StackOverflow (or> other) pages ***>  >     [prompt]> ls>     pre0.py  pre1.py>     [prompt]>>     [prompt]> cat pre0.py>     print("This is:", __file__)>  >     [prompt]> python3 -c "import os,> subprocess;subprocess.Popen(os.path.join(os.getcwd(),> "pre0.py")).communicate()">     Traceback (most recent call last):>       File "<string>", line 1, in <module>>       File "/usr/lib/python3.6/subprocess.py", line 709, in __init__>         restore_signals, start_new_session)>       File "/usr/lib/python3.6/subprocess.py", line 1344, in _execute_child>         raise child_exception_type(errno_num, err_msg, err_filename)>     OSError: [Errno 8] Exec format error:> '/cygdrive/e/Work/Dev/StackOverflow/q055271912/pre0.py'>     [prompt]>>     [prompt]> cat pre1.py>     #!/usr/bin/env python3>  >     print("This is:", __file__)>  >     [prompt]> python3 -c "import os,> subprocess;subprocess.Popen(os.path.join(os.getcwd(),> "pre1.py")).communicate()">     This is: /cygdrive/e/Work/Dev/StackOverflow/q055271912/pre1.py

另一种方法是运行解释后面的文件名,但我不知道如何从做 -实际上是需要修补 WERKZEUG ( __reloader.py_ :
__get_args_for_reloading_ ),但这只是一个蹩脚的解决方法( gainarie )-见下文。


更新 #0

查看@AxelGrytt的答案,结果发现这是一个已知问题:[GitHub]:pallets /
werkzeug-0.15.0导致OSError:[Errno 8] Exec格式错误:在Docker for
Windows中(hmm,与此同时提交问题(发布后2天):))。

因此,我上面所说的是正确的,但是值得一提的是,还有另一种修复方法:删除文件的 exec 权限:

chmod -x api/manage.py

根据 Werkzeug的 作者,从现在开始, 这是理想的行为 (也适用于 v 0.15.2 ):

  • 设置 exec 权限的文件,还 应该 有一个 shebang
  • 一个文件 没有 一个 家当不应该EXEC 权限集


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5000551.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-14
下一篇2022-11-14

发表评论

登录后才能评论

评论列表(0条)

    保存