Docker 容器上的文件权限
Posted
技术标签:
【中文标题】Docker 容器上的文件权限【英文标题】:File Permissions on Docker Container 【发布时间】:2019-09-11 13:32:59 【问题描述】:在使用网络表单将文件上传到我的应用程序目录时,我遇到了一个非常奇怪的问题。
虽然后端方面的一切似乎都运行良好,但当上传某些扩展名的文件(例如 .apk
)时,权限被设置为 only root
对这些文件具有读取权限文件,而其他类型的文件(例如图像)通常可以访问。我不知道是扩展还是大尺寸(与 KB 相比大约 15 MB),但看起来后台正在进行某种过滤
更新
更多关于环境的信息
nginx
用于代理 django 服务器的容器(gunicorn
)
部署操作系统为Ubuntu 16.04
Web 应用程序是 Django 2.2 项目
问题似乎与文件大小有关,而根本与扩展名无关
似乎与Django在上传完成后将文件从/tmp
目录移动到/media
目录有关
【问题讨论】:
您没有提供有关您使用的软件的信息。哪个操作系统?哪个网络服务器?哪个网络应用程序?如果您上传 没有.apk
扩展名的 15MB 文件会怎样?
Django 根据文件大小以不同方式处理上传。超过 2.5mb 将被写入 tmp 文件。如果您的 docker 用户是 root 而不是专用的 docker 用户,则可以解释这种行为:docs.djangoproject.com/en/2.2/topics/http/file-uploads/… 但@larsks 是对的。我们需要更多信息来帮助您解决问题。
对于我的帖子中缺少信息,我深表歉意。我真的认为这是一个无代码问题,这就是为什么我不想让我的问题充满不需要的信息。虽然我认为问题是@jsbeckr 在我以root 身份运行docker-compose 时提到的。不过,我会在我的帖子中添加更多信息
请看minimal reproducible example
【参考方案1】:
最后,在 @jsbeckr 的宝贵帮助下,我找到了解决方法。
通过this link,我发现了一些方便的配置,因为我无法更改运行docker-compose
的用户
# For files
FILE_UPLOAD_PERMISSIONS = 0o644 #or whatever fits to your needs
# For directories
FILE_UPLOAD_DIRECTORY_PERMISSIONS = 0o644
# If you need to switch it from /temp
FILE_UPLOAD_TEMP_DIR = /path/to/dir
【讨论】:
以上是关于Docker 容器上的文件权限的主要内容,如果未能解决你的问题,请参考以下文章
Docker&Kubernetes ❀ Docker Capabilities 容器进程能力权限与执行文件能力权限设置