我在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'
答案 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