gpt4 book ai didi

docker - 当我不想编辑的Tomcat Docker镜像不以ROOT身份运行时,如何写入ROOT拥有的目录?

转载 作者:行者123 更新时间:2023-12-02 20:54:13 24 4
gpt4 key购买 nike

我有一个尝试使用K8运行的docker镜像。我可以让它在我的家庭环境中运行,但不能在我的工作场所中运行,因为我们无法在k8集群上以root用户身份运行。
docker 镜像是带有WAR文件的Tomcat服务器,该文件位于此处:
/usr/local/tomcat/webapps/ROOT.war
在启动期间,Tomcat尝试将WAR爆炸到以下目录中:
/ 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下创建了一个空的ROOT文件夹,因此Tomcat无法将WAR爆炸到WAR,因为它希望自己创建ROOT。
我也尝试过这个:
    volumeMounts:
- mountPath: //usr/local/tomcat/webapps
name: tomcat
但是现在/ webapps只是一个空文件夹,因为我假设我正在覆盖容器启动时为我设置的内容。
我显然在这里缺少一些基础知识...我不想编辑图像,因为我相信必须有另一种解决方法,我只是想让/ tomcat / webapps可以由不是root的runAsUser写入。
做这个的最好方式是什么?

最佳答案

修复此问题的简单方法是通过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

关于docker - 当我不想编辑的Tomcat Docker镜像不以ROOT身份运行时,如何写入ROOT拥有的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63855393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com