我有一个flask应用和一个创建svg文件的函数。当我在本地运行时,一切都能正常工作,但在使用Docker时,我一直运行到这个错误。
File "app.py", line 91, in get_svg
svg_f = open("output.svg", "w+")
PermissionError: [Errno 13] Permission denied: 'output.svg'
起初我以为问题出在路径上 但由于我只写到当前目录,这应该就够了 (尝试了绝对路径和所有其他可能的选项).
这个函数只是有标准的打开文件和写入文件的方式。
svg_f = open("output.svg", "w+")
svg_f.write(f'<svg width="{w}" height="{h}" xmlns="http://www.w3.org/2000/svg">')
....
svg_f.close()
是什么原因造成的呢?
请确保 Dockerfile
并没有指定 USER
可能没有权限在您的 WORKDIR
. 注释也是相关的(挂载的卷和容器作为一个低私有用户运行)。这里有一个简单的图像示例,你可以用它来调试。
Docker文件
FROM python:3.8-alpine
RUN mkdir /app
COPY app.py /app
WORKDIR /app
ENTRYPOINT ["python3"]
CMD ["/app/app.py"]
app.py
w = 1
with open('output.svg', 'w+') as fw:
fw.write(f'<svg width="{w}"')
print('Success!')
表演时间
$ docker build -t edd/so_q .
...magic...
$ docker run edd/so_q
Success!