当前位置: 首页 > 面试题库 >

如何授予Docker容器中的非root用户访问主机上安装的卷的权限

柯甫
2023-03-14
问题内容

我以非root用户身份在Docker容器中运行应用程序。我这样做是因为这是最佳做法之一。但是,在运行容器时,我将主机卷安装到该容器上-v /some/folder:/some/folder。我这样做是因为在docker容器中运行的html" target="_blank">应用程序需要将文件写入已安装的主机文件夹中。但是由于我以非root用户身份运行应用程序,因此它无权写入该文件夹

是否可以授予docker容器中的非root用户访问托管卷的权限?

如果不是,我唯一的选择是以root身份在docker容器中运行进程吗?


问题答案:

这里没有神奇的解决方案:对docker内部的权限的管理与没有docker的权限相同。您需要运行适当的chownchmod命令来更改目录的权限。

一种解决方案是让您的容器以root用户身份运行,并使用ENTRYPOINT脚本进行适当的权限更改,然后再CMD以非特权用户身份使用。例如,将以下内容放入entrypoint.sh

#!/bin/sh

chown -R appuser:appgroup /path/to/volume
exec runuser -u appuser "$@"

假设您有runuser可用的命令。您可以使用sudo替代品完成几乎相同的事情。

通过ENTRYPOINT在Dockerfile中包含指令来使用以上脚本:

FROM baseimage

COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/bin/sh", "entrypoint.sh"]
CMD ["/usr/bin/myapp"]

这将以以下内容启动容器:

/bin/sh entrypoint.sh /usr/bin/myapp

入口点脚本将进行所需的权限更改,然后以/usr/bin/myapp身份运行appuser



 类似资料:
  • 问题内容: 我看过许多类似的问题,因此表明我已经检查了基础知识。当然,这并不意味着我没有错过任何显而易见的东西。:-) 我的问题是:为什么我拒绝具有特权的用户访问权限,而我却已经在其中输入密码并被授予访问权限?(为了完整起见,我尝试输入错误的密码只是为了确保MySQL客户端在程序启动时拒绝我访问。) 背景: 通过ssh登录到运行MySQL服务器的计算机的外壳,我以root用户身份登录: 太棒了 我

  • 问题内容: 我已经能够成功使用以下卷在Docker容器之间共享文件夹 但是我的问题是,这与在Dockerfile中使用命令之间有什么区别 我正在使用带有命令的图像,并且想知道如何与主机共享它。我已经使用上面的命令完成了此操作,但我不知道是否同时需要和和。 问题答案: 该命令将在您的容器中安装一个目录,并将在该目录中创建或编辑的所有文件存储 在容器文件结构外部的 主机磁盘上,绕过联合文件系统。 这个

  • 已试过 获取 错误1064(42000):您的SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,了解第1行“标识由'root'WITH GRANT option”附近使用的正确语法。 注意:在以前的版本中尝试时同样有效。 也试过 获取 错误1410(42000):不允许创建具有授权的用户 MySQL(8.0.11.0)用户名/密码是root/root。

  • 问题内容: 我知道我可以使用视图来授予对表中属性子集的访问权限。但是,如何只授予对特定元组的访问权限?假设我有一个注册学生的表格,一个用户名属性,然后是诸如degree_status之类的其他名称,我如何授予访问权限,以便用户A只能从该表中选择一个与用户名A相对应的元组?我有一个数据库考试,正在研究一些以前的论文,遇到了这个问题,但是我不知道该如何回答,我在《 Dtabase System:数据库

  • 问题内容: 我正在尝试按照http://jpetazzo.github.io/中描述的过程从运行的jenkins docker容器(jenkins:latest)内的OS X主机上,在运行Docker for Mac 17.06.0-ce-mac17的OSX主机上调用docker 2015/09/03 / do-not- use-docker-in-docker-for-ci /。 我将/var/