运行 Consul Docker kubernetes 中的图像作为非 root

Run Consul Docker image in kubernetes as non root

我想 运行 在 kubernetes 中使用 consul,但我不能 运行 作为 root 用户。

因此我添加了

RUN addgroup consul root

到 Docker 文件(派生 FROM consul: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 一起启动 consul(当我在 Docker 本地启动它时,他曾经是用户 consul 现在应该是该组的成员root).

但现在我在 pod 启动时收到以下错误

chown: /consul/data: Operation not permitted

chown 在 Consuls docker-entrypoint.sh 中执行,我猜它(仍然)失败了,因为用户 100 不是 root。

当容器有一个入口点脚本期望以 root 身份执行时,谁能解释一下如何以非 root 用户启动容器?

我最终修复了 Consuls docker-entrypoint.sh,通过添加一些 if [ "$(id -u)" = "0" ] 测试来检查用户是否是 root 用户,然后再执行 chown 命令。

You can find the patch on GitHub.

如果/consul 是nfs 挂载,可能是服务器设置了root_squashall_squash。这将导致 chown 操作失败,因为新的 files/folders 将自动提供给 nobody/nogroup.

如果您可以(临时)更改共享以使用 no_root_squashno_all_squash,直到所有文件都已设置,您应该没问题。由于该文件系统通常是持久化的,因此只需要一次,因此之后您可以将其重新设置为 root_squashall_squash

万一有人在寻找解决方案。 您还可以使用来自 Bitnami 的 Consul 图像。他们提供流行应用程序的非根图像。

docker pull bitnami/consul:1.4.4