以非根用户身份运行kubernetes中的领事Docker映像

以非根用户身份运行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

我想在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-deployment
spec:
  template:
    spec:
      securityContext:
        runAsUser: 100
现在我希望kubernetes用用户
100
(我在Docker本地启动时,他曾是用户
consul
,现在应该是组
root
的成员)

但是现在,当pod启动时,我得到以下错误信息

chown: /consul/data: Operation not permitted
chown
是在consus中执行的,我猜它(仍然)会失败,因为user
100
不是root


有人能告诉我,当容器有一个入口点脚本,希望以root用户身份执行时,如何使用非root用户启动容器吗?

我最终修复了consurs
docker 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
,它工作得很好!