Werkzeug: 0.15.0 OSError рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ: [Errno 8] рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╛рд░реВрдк рддреНрд░реБрдЯрд┐: рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдореЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдорд╛рд░реНрдЪ 2019  ┬╖  19рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pallets/werkzeug

рдирдпрд╛ 0.15.0 рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдореЗрдВ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИред рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдбреЙрдХрд░ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИред

рдлреНрд▓рд╛рд╕реНрдХ рдХреЗ рд╕рд╛рде рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдгред

app.py

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello, world!'

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

рдбреЙрдХрд░рдлрд╛рдЗрд▓

FROM python:3-onbuild
COPY . /usr/src/app
CMD ["python", "app.py"]

рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ.txt

# Werkzeug==0.14.1
Flask

docker build -t flask_test . рдЪрд▓рд╛рдПрдБ рдФрд░ рдлрд┐рд░ docker run flask_test ред
рдХрдВрдЯреЗрдирд░ рдореЗрдВ рддреНрд░реБрдЯрд┐:

╬╗ docker run flask_test
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
Traceback (most recent call last):
  File "app.py", line 11, in <module>
    app.run(debug=True, host='0.0.0.0')
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 943, in run
    run_simple(host, port, self, **options)
  File "/usr/local/lib/python3.6/site-packages/werkzeug/serving.py", line 988, in run_simple
    run_with_reloader(inner, extra_files, reloader_interval, reloader_type)
  File "/usr/local/lib/python3.6/site-packages/werkzeug/_reloader.py", line 332, in run_with_reloader
    sys.exit(reloader.restart_with_reloader())
  File "/usr/local/lib/python3.6/site-packages/werkzeug/_reloader.py", line 176, in restart_with_reloader
    exit_code = subprocess.call(args, env=new_environ, close_fds=False)
  File "/usr/local/lib/python3.6/subprocess.py", line 267, in call
    with Popen(*popenargs, **kwargs) as p:
  File "/usr/local/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/local/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: '/usr/src/app/app.py

requirements.txt рдореЗрдВ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЛ рдЕрдирдХрдореНрдореЗрдВрдЯ рдХрд░реЗрдВ рдФрд░ рдпрд╣ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдареАрдХ рд╕реЗ рдЪрд▓рддреА рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╡рд╣реА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реАред рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ред

рдореИрдВрдиреЗ рдЕрдкрдиреА app.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реЗрдмреИрдВрдЧ рдЬреЛрдбрд╝рд╛ рд╣реИ

#!/usr/local/bin/python3

рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЕрдиреБрдорддрд┐ рдХреЗ рдореБрджреНрджреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ред рдлрд┐рд░ рдореИрдВрдиреЗ рд╕реАрдПрдордбреА . рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ Dockerfile рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдЬреЛрдбрд╝рд╛

RUN chmod 644 app.py

рд╕рднреА 19 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдп рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдореБрджреНрджрд╛ред рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛

  • рд╕реЗрдВрдЯреЛрд╕ 7.4 рдЕрдЬрдЧрд░ 3.6 . рдХреЗ рд╕рд╛рде
  • рдореИрдХ рдУрдПрд╕рдПрдХреНрд╕ 10.14.3 рдЕрдЬрдЧрд░ 3.7 рдХреЗ рд╕рд╛рде

рдпрд╣ _reloading.py рдореЗрдВ _get_args_for_reloading() рдореЗрдВ рд╣реБрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред

cwd() /home/user/Projects/test/ . рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, app.py рдирд╛рдордХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП

_get_args_for_reloading() рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрддрд╛ рд╣реИ:

0.14.1 рдХреЗ рд╕рд╛рде:

['/home/user/.virtualenvs/test-ChRUEUMK/bin/python', 'app.py']

0.15.0 рдХреЗ рд╕рд╛рде

['/home/user/Projects/test/app.py']

рдкрде рдкрд░ /home/user/.virtualenvs/test-ChRUEUMK/bin/python рддреИрдпрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИред

@shinuza рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ app.py рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реИ, рдпрджрд┐ рд╣рд╛рдВ - chmod 644 app.py рд╕реЗрдЯ рдХрд░реЗрдВред рдпрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛, app.py рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╢реЗрдмреИрдВрдЧ рдЬреЛрдбрд╝реЗрдВ рдЬреИрд╕реЗ #!/usr/bin/env python

@shinuza рд╡рд╣рд╛рдБ https://github.com/pallets/werkzeug/blob/0.15.x/src/werkzeug/_reloader.py#L90 рд▓рд╛рдЗрди 90-94 "'/home/user/.virtualenvs/test-ChRUEUMK/bin /python'" рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЕрдЧрд░ app.py рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдерд╛ред
рдФрд░ OSError: [Errno 8] Exec рдкреНрд░рд╛рд░реВрдк рддреНрд░реБрдЯрд┐: '/usr/src/app/app.py рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ app.py рдореЗрдВ рд╢реЗрдмреИрдВрдЧ рд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реИ (https://stackoverflow.com/questions/27606653/oserror-errno- 8-рдирд┐рд╖реНрдкрд╛рджрди-рдкреНрд░рд╛рд░реВрдк-рддреНрд░реБрдЯрд┐)

@kamyanskiy рдореИрдВрдиреЗ рдЕрднреА рдХреЛрдб рдХреЛ рдкрдврд╝рдХрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рдЙрддрдиреА рд╣реА рдЧреВрдврд╝ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рддрдиреА рдЕрднреА рд╣реИред

рд╕рд╛рде рд╣реА, рдпрджрд┐ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ python app.py рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдЙрдкрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЛрдИ рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдЙрд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛рдиреА: рд╕рд╛рдЭрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣рд░ рдлрд╛рдЗрд▓ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИред

@shinuza рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрдЧ рд╣реИ, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдм рдереЛрдбрд╝рд╛ рд╕рдЦреНрдд рд╣реИред рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рд╢реЗрдмреИрдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп app.py рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдФрд░ рджреВрд╕рд░рд╛ рдореБрдЭреЗ "рдкрд╛рдпрдерди app.py" рдЬреИрд╕реЗ рд╢реЗрдмреИрдВрдЧ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдирд╣реАрдВ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рд╢рд╛рдпрдж рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдерд╛ :) рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП рдмрд╕ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рд╢реЗрдмреИрдВрдЧ рдЬреЛрдбрд╝реЗрдВ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред

рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╢реАрд░реНрд╖ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рджреБрднрд╛рд╖рд┐рдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝рдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк pre-commit рдХреЗ check-executables-have-shebangs рд╣реБрдХ рдЬреИрд╕реЗ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп python script.py рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореИрдВ рдпрд╣рд╛рдВ рдореБрдЦреНрдп рддрд░реНрдХ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЗрд╕ рддрдереНрдп рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдпрд╛ рдХреЛрдб рдирд╣реАрдВ рдкрдврд╝рддреЗред рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдЪреИрдВрдЬ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓рд┐рдирдХреНрд╕ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкрд░ рд╣рдорд╛рд░рд╛ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЪреЗрдВрдЬрд▓реЙрдЧ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИ:

рдпрджрд┐ рдкрд╛рдпрдерди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкреБрдирдГ рд▓реЛрдбрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛ рдкреНрд░реАрдкреЗрдиреНрдб рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдкреБрдирдГ рд▓реЛрдбрд░ рдХреЛ NixOS рдкрд░ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред #1242

рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд╛рд░реНрдп рдирд╣реАрдВ рдмрдирд╛рдирд╛ред рдореЗрд░реЗ рд▓рд┐рдП рд╢реЗрдмрдВрдЧ рд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдирд╣реАрдВ рдорд┐рд▓реАрдВред рд╡рд╣ рдкрд╣рд▓реА рдЪреАрдЬ рдереА рдЬрд┐рд╕рдХреА рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдереАред

#!/usr/bin/env python3 рдХреЗ рд╕рд╛рде:

╬╗ docker run flask_test
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
: No such file or directory

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдмрд╛рдХреА рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдореБрдЭреЗ рдЯреВрдЯрд╛ рд╣реБрдЖ рд▓рдЧрддрд╛ рд╣реИред

@ penner42 рдХреЛрд╢рд┐рд╢ #!/usr/bin/env python

root<strong i="7">@4541ebd677e0</strong>:/usr/src/app# ls -la /usr/local/bin/python3
lrwxrwxrwx 1 root staff 9 Mar  4 23:40 /usr/local/bin/python3 -> python3.6
root<strong i="8">@4541ebd677e0</strong>:/usr/src/app# ls -la /usr/local/bin/python 
lrwxrwxrwx 1 root staff 7 Mar  4 23:40 /usr/local/bin/python -> python3

рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдкрд╛рд╕ python3 рдкрд░ рд╕рд┐рдореНрд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИ

рд╡рд╣реА рдкрд░рд┐рдгрд╛рдоред Python3 рд╕рд┐рдореНрд▓рд┐рдВрдХ рд╣реИ, рдФрд░ рд╢реЗрд▓ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдмрд╕ /usr/bin/env python3 рдпрд╛ /usr/bin/env python рдЪрд▓ рд░рд╣рд╛ рд╣реИред

FWIW, рдбреЙрдХрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

flask run рдХрдорд╛рдВрдб рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред

FROM python:3.7-alpine
WORKDIR /app
ENV FLASK_ENV development
ENV FLASK_APP example
EXPOSE 5000
RUN ["pip", "install", "flask"]
CMD ["flask", "run", "-h", "0.0.0.0"]
docker run --rm -p 5000:5000 -v $(pwd):/app flask/example:latest

рдХреНрдпрд╛ https://docs.docker.com/compose/gettingstarted/ рдкрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╡рд┐рдВрдбреЛрдЬ 7 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛?
рдХреНрдпрд╛ рдпрд╣ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ:

$ docker-compose up
Creating composetest_web_1   ... done
Creating composetest_redis_1 ... done
Attaching to composetest_web_1, composetest_redis_1
redis_1  | 1:C 27 Mar 2019 17:29:12.746 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1  | 1:C 27 Mar 2019 17:29:12.746 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1  | 1:C 27 Mar 2019 17:29:12.747 # Warning: no config file specified, using the default config. In order to specify a config file use redis-ser
ver /path/to/redis.conf
redis_1  | 1:M 27 Mar 2019 17:29:12.757 * Running mode=standalone, port=6379.
redis_1  | 1:M 27 Mar 2019 17:29:12.757 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to th
e lower value of 128.
redis_1  | 1:M 27 Mar 2019 17:29:12.758 # Server initialized
redis_1  | 1:M 27 Mar 2019 17:29:12.758 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issu
e add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
web_1    |  * Serving Flask app "app" (lazy loading)
web_1    |  * Environment: production
web_1    |    WARNING: Do not use the development server in a production environment.
web_1    |    Use a production WSGI server instead.
web_1    |  * Debug mode: on
web_1    |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
web_1    |  * Restarting with stat
web_1    | Traceback (most recent call last):
web_1    |   File "app.py", line 32, in <module>
web_1    |     app.run(host="0.0.0.0", debug=True)
web_1    |   File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 943, in run
web_1    |     run_simple(host, port, self, **options)
web_1    |   File "/usr/local/lib/python3.4/site-packages/werkzeug/serving.py", line 988, in run_simple
web_1    |     run_with_reloader(inner, extra_files, reloader_interval, reloader_type)
web_1    |   File "/usr/local/lib/python3.4/site-packages/werkzeug/_reloader.py", line 332, in run_with_reloader
web_1    |     sys.exit(reloader.restart_with_reloader())
web_1    |   File "/usr/local/lib/python3.4/site-packages/werkzeug/_reloader.py", line 176, in restart_with_reloader
web_1    |     exit_code = subprocess.call(args, env=new_environ, close_fds=False)
web_1    |   File "/usr/local/lib/python3.4/subprocess.py", line 534, in call
web_1    |     with Popen(*popenargs, **kwargs) as p:
web_1    |   File "/usr/local/lib/python3.4/subprocess.py", line 856, in __init__
web_1    |     restore_signals, start_new_session)
web_1    |   File "/usr/local/lib/python3.4/subprocess.py", line 1464, in _execute_child
web_1    |     raise child_exception_type(errno_num, err_msg)
web_1    | OSError: [Errno 8] Exec format error
composetest_web_1 exited with code 1

рд╡рд╣реА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реАред рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ред

рдореИрдВрдиреЗ рдЕрдкрдиреА app.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реЗрдмреИрдВрдЧ рдЬреЛрдбрд╝рд╛ рд╣реИ

#!/usr/local/bin/python3

рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЕрдиреБрдорддрд┐ рдХреЗ рдореБрджреНрджреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ред рдлрд┐рд░ рдореИрдВрдиреЗ рд╕реАрдПрдордбреА . рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ Dockerfile рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдЬреЛрдбрд╝рд╛

RUN chmod 644 app.py

рдХреГрдкрдпрд╛ рдХреЛрдИ рднреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (https://docs.docker.com/compose/gettingstarted/)
рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП

RUN chmod 644 app.py

рдЯреВрд▓ 0.15.5 рдореЗрдВ рдлрд┐рдХреНрд╕реНрдбред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕