![当通过docker-compose运行时,Flask CLI抛出“ OSError:[Errno 8] Exec格式错误”,第1张 当通过docker-compose运行时,Flask CLI抛出“ OSError:[Errno 8] Exec格式错误”,第1张](/aiimages/%E5%BD%93%E9%80%9A%E8%BF%87docker-compose%E8%BF%90%E8%A1%8C%E6%97%B6%EF%BC%8CFlask+CLI%E6%8A%9B%E5%87%BA%E2%80%9C+OSError%EF%BC%9A%5BErrno+8%5D+Exec%E6%A0%BC%E5%BC%8F%E9%94%99%E8%AF%AF%E2%80%9D.png)
看起来您的 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 3 ):
自定义 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 权限集
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)