Docker上的Flask应用程序,Windows 10专业版-OS错误:[Errno 13]权限被拒绝

时间:2019-07-15 19:14:02

标签: docker flask

我在Windows 10 Pro上使用Docker(Linux容器)。我为flask应用程序创建了一个docker build。运行应用程序后,我得到PermissionError:

  

[Errno 13]权限被拒绝:“ / app / app.py”

在引用了一些帖子后,我创建了用户并在dockerfile中添加了权限,但这仍然行不通

1.docker版本

Client: Docker Engine - Community
 Version:           18.09.2

 API version:       1.39

 Go version:        go1.10.8

 Git commit:        6247962

 Built:             Sun Feb 10 04:12:31 2019

 OS/Arch:           windows/amd64

 Experimental:      false


Server: Docker Engine - Community
 Engine:
  Version:          18.09.2

  API version:      1.39 (minimum version 1.12)

  Go version:       go1.10.6

  Git commit:       6247962

  Built:            Sun Feb 10 04:13:06 2019

  OS/Arch:          linux/amd64

  Experimental:     false

2.Docker文件

FROM python:3.7.3

RUN useradd -ms /bin/bash admin

COPY . /app 

WORKDIR /app

RUN pip install -r "requirements.txt"

RUN chown -R admin:admin /app

RUN chmod 776 /app

USER admin

ENTRYPOINT ["python"]

CMD ["app.py"]  

3.Requirement文件

flask
tensorflow-gpu
flask_cors
uuid
librosa
numba
pysoundfile
numpy
cffi
requests
wave
h5py
pydub
werkzeug

4。错误日志

 File "app.py", line 552, in <module>
    app.run(debug = True, host = '0.0.0.0')

  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 990, in run
    run_simple(host, port, self, **options)

  File "/usr/local/lib/python3.7/site-packages/werkzeug/serving.py", line 1007, in run_simple
run_with_reloader(inner, extra_files, reloader_interval, reloader_type)

 File "/usr/local/lib/python3.7/site-packages/werkzeug/_reloader.py", line 332, in run_with_reloader
    sys.exit(reloader.restart_with_reloader())

  File "/usr/local/lib/python3.7/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.7/subprocess.py", line 323, in call
    with Popen(*popenargs, **kwargs) as p:

  File "/usr/local/lib/python3.7/subprocess.py", line 775, in __init__
    restore_signals, start_new_session)

  File "/usr/local/lib/python3.7/subprocess.py", line 1522, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)

PermissionError: [Errno 13] Permission denied: '/app/app.py'

1 个答案:

答案 0 :(得分:0)

根本原因是RUN chmod 776 /app,您只需更改文件夹的权限,而不是/app/app.py的权限。

您应该使用RUN chmod -R 776 /app替换旧的,然后app.py将具有执行权限。

实际上,在您的情况下,python app.py已经成功运行,这是因为使用python调用脚本时,即使py文件没有执行权限也可以。但是对于flask application来说有些不同,您可以从日志中看到:

  

reloader.restart_with_reloader()
  exit_code = subprocess.call(args,env = new_environ,close_fds = False)

烧瓶将再次调用顶部脚本作为子进程,在这里,它将调用/app/app.py。这次,它将仅以/app/app.py而不是python /app/app.py的身份执行它,这意味着文件app.py必须具有执行许可权。

其他提醒,您需要在#!的开头添加app.py,如果遇到其他问题,则需要添加以下内容:

#!/usr/bin/env python
相关问题