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 数据卷挂载的文件权限问题

Docker 上的 Jupyter 笔记本 - 权限被拒绝

Docker&Kubernetes ❀ Docker Capabilities 容器进程能力权限与执行文件能力权限设置

如何在docker容器文件夹中授予文件夹权限

Docker&Kubernetes ❀ Docker Capabilities 容器进程能力权限与执行文件能力权限设置

如何在 Elastic Beanstalk 上为特定容器设置文件夹权限