当前位置: 首页 > 知识库问答 >
问题:

对于不想编辑的Tomcat Docker映像,当不以ROOT身份运行时,如何写入ROOT拥有的目录?

令狐珂
2023-03-14

我有一个docker映像,我正在尝试使用K8S运行它。我可以让它在我的家庭环境中运行,但不能在我的工作环境中运行,因为我们不能在k8集群上以root身份运行。

docker映像是一个Tomcat服务器,其中包含一个WAR文件:

/usr/local/tomcat/webapps/root.war

在启动期间,Tomcat试图将战争分解到以下目录中:

/usr/local/tomcat/webapps/root

但它不能这样做,因为/usr/local/tomcat/webapps/由root所有。

所以我认为最好的解决方法是用emptyDir{}装入一个卷,如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers: 
    ...
    name: test-container
    volumeMounts:
    - mountPath: //usr/local/tomcat/webapps/ROOT
      name: tomcat
  volumes:
  - name: tomcat
    emptyDir: {}

但这并不起作用,因为它只是在webapps下创建了一个空的根文件夹,Tomcat无法对其发起战争,因为它希望自己创建根文件夹。

我也试过这个:

    volumeMounts:
    - mountPath: //usr/local/tomcat/webapps
      name: tomcat

但现在/webapps只是一个空文件夹,因为我假设我正在覆盖容器启动时为我设置的内容。

我显然遗漏了一些基本的东西...我不想编辑图像,因为我相信一定有其他方法可以解决这个问题,我只是想让/tomcat/webapps可以被不是root的runAsUser写。

做这件事最好的方法是什么?

共有1个答案

濮阳唯
2023-03-14

修复的简单方法是通过initcontainer:,但fsgroup:是更声明性的修复方法,只要集群的安全策略允许设置该字段

spec:
  initContainers:
  - name: chown
    image: docker.io/library/busybox:latest
    command:
    - chown
    - -R
    - whatever-the-uid-is-for-your-tomcat-image
    - /usr/local/tomcat/webapps/ROOT
    volumeMounts:
    - mountPath: /usr/local/tomcat/webapps/ROOT
      name: tomcat
  containers:
  # ... as before
 类似资料:
  • 问题内容: 简而言之… 首先,为什么npm建议仅以非root用户身份运行它?我不相信高,每一个其他的包管理器(,,,)是错误的,需要sudo的。 其次,当我遵循他们的建议(并以非超级用户身份运行)时,它将不起作用(因为非超级用户没有对/ usr / local / lib的许可)。我如何遵循他们的建议?我不会去,因为这对我来说似乎是个坏主意。 详细描述… 我通过(自述文件中的说明)安装了npm。

  • 问题内容: 我在Linux(Debian)上开发了C代码。有时,我需要通过执行一些命令 我想知道是否可以通过root用户执行命令。如果不是这种情况,是否有任何功能可以我在C代码上以root身份执行命令(或运行二进制文件)? 问题答案: 在遇到普通用户要执行root命令之前,我们遇到了这种情况,这是我们的解决方案(使用setuid / SUID): 假使,假设: 用户名 : 组别 : C程序文件 :

  • 问题内容: 我正在使用Python在系统级别的Linux中进行项目。因此,我想知道,如果我以普通用户身份运行代码,并且正在访问系统文件,那么它应该具有root权限,那么我如何提示输入root密码并以超级用户身份运行其他代码。我想知道,如何以超级用户身份以密码提示运行python脚本。 任何帮助将不胜感激。先感谢您.. 问题答案: 您可以做的另一件事是,如果脚本不是以root身份执行的,则脚本会自动

  • 我使用Ansible安装了Nginx。要在Centos7上安装,我使用了yum软件包,因此默认情况下它是以root用户身份运行的。我希望它在Centos中以不同的用户(前nginx用户)身份启动和运行。当我尝试与其他用户一起运行时,会出现以下错误: nginx的工作。服务失败,因为控制进程已退出,错误代码为。有关详细信息,请参阅“systemctl status nginx.service”和“j

  • 我正在Docker中制作python Django应用程序的简单图像。但是在构建容器的末尾,它抛出了下一个警告(我正在Ubuntu 20.04上构建):

  • 问题内容: 我有一些bash脚本,它们会在指定的时间添加到cron作业中,但是需要以root用户身份执行。我正在尝试运行那些脚本,即crob作业,但是它需要root用户权限,因为我在受限root用户的ubuntuec2实例中运行此作业。以root用户身份运行那些脚本的解决方法是什么。 谢谢 问题答案: 有几种可能性: 1)将脚本添加到root的crontab中。为此,您必须要做或成为root用户,