【发布时间】:2020-12-30 11:15:12
【问题描述】:
我有一个正在尝试使用 K8s 运行的 docker 映像。我可以让它在我的家庭环境中运行,但不能在我的工作场所运行,因为我们无法在 k8 集群上以 root 身份运行。
docker 镜像是一个 Tomcat 服务器,其中包含一个 WAR 文件:
/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 爆炸到,因为它希望自己创建 ROOT。
我也试过这个:
volumeMounts:
- mountPath: //usr/local/tomcat/webapps
name: tomcat
但现在 /webapps 只是一个空文件夹,因为我假设我正在覆盖容器在启动时为我设置的内容。
我显然在这里遗漏了一些基本的东西......我不想编辑图像,因为我相信必须有另一种方法解决这个问题我只是希望 /tomcat/webapps 可以由 runAsUser 写入,而不是根。
最好的方法是什么?
【问题讨论】:
-
你在运行什么镜像?它是您自己构建的,还是可从 docker hub 获得的?无论哪种情况,我们都可以看看吗?我的直接反应是图像有问题,或者至少设计不佳,以至于它假定它以
root运行。 -
@larks 感谢您的关注,图像可以在这里找到:hub.docker.com/r/plantuml/plantuml-serverplantuml/plantuml-server:tomcat Jetty 图像也有类似的问题,它试图在 / 下创建一个新文件变量/库
标签: docker tomcat kubernetes containers root