以非根用户身份运行kubernetes中的领事Docker映像
我想在kubernetes中运行concur,但不允许我以root用户身份运行它 因此我补充说以非根用户身份运行kubernetes中的领事Docker映像,docker,kubernetes,consul,Docker,Kubernetes,Consul,我想在kubernetes中运行concur,但不允许我以root用户身份运行它 因此我补充说 RUN addgroup consul root 到Dockerfile(从Consor:1.0.3衍生而来的) 并在kubernetes中开始部署 apiVersion: extensions/v1beta1 kind: Deployment metadata: labels: xyz.service: consul-deployment name: consul-deployme
RUN addgroup consul root
到Dockerfile(从Consor:1.0.3衍生而来的)
并在kubernetes中开始部署
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
xyz.service: consul-deployment
name: consul-deployment
spec:
template:
spec:
securityContext:
runAsUser: 100
现在我希望kubernetes用用户100
(我在Docker本地启动时,他曾是用户consul
,现在应该是组root
的成员)
但是现在,当pod启动时,我得到以下错误信息
chown: /consul/data: Operation not permitted
chown
是在consus中执行的,我猜它(仍然)会失败,因为user100
不是root
有人能告诉我,当容器有一个入口点脚本,希望以root用户身份执行时,如何使用非root用户启动容器吗?我最终修复了consursdocker entrypoint.sh
,在执行chown命令之前,通过添加一些if[“$(id-u)”=“0”
测试来检查用户是否是root用户
如果/concur是nfs挂载,则可能是在服务器上设置了root\u squash
和all\u squash
。这将导致chown操作失败,因为新文件/文件夹将自动提供给nobody/nogroup
如果您可以(临时)将共享更改为使用no\u root\u squash
和no\u all\u squash
,直到所有文件都已设置完毕,您就可以了。由于该文件系统通常是持久化的,因此应该只需要一次,因此之后您可以将其重置为root\u squash
和all\u squash
。以防有人寻找解决方案。
您还可以使用来自Bitnami的领事图像。它们提供流行应用程序的非根映像
docker pull bitnami/consul:1.4.4
严格来说,这不是对您的问题的回答,但您可以通过在-x
模式下运行他们的入口点来获得一些成功,以查看导致失败的两个值是什么<代码>命令:[“/usr/bin/dumb init”、“/bin/sh”、“-x”、“/usr/local/bin/docker entrypoint.sh”]
在您的PodSpec中理论上应该这样做。顺便说一句,仅仅是root
组的一员对一个人chown
的能力绝对没有任何影响。事实上,最好是从Consor继承构建自己的容器,并通过sed实时应用补丁。我尝试了RUN/bin/sed-I's/^\(.*set--su exec-consu:consu“$@”\)/if[“$(id-u)”=“0”];然后是\n\1\n fi/'/usr/local/bin/docker entrypoint.sh
,它工作得很好!