在 kubernetes 中以非 root 身份运行 Consul Docker 映像



我想在 kubernetes 中运行 consul,但我不允许以用户 root 身份运行它。

因此我添加了

RUN addgroup consul root

到 Dockerfile (派生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是在领事docker-entrypoint.sh中执行的,我想它(仍然(失败,因为用户100不是root。

当容器具有期望以 root 身份执行的入口点脚本时,任何人都可以解释我如何使用非 root 用户启动容器吗?

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

您可以在 GitHub 上找到该补丁。

以防有人寻找解决方案。 您也可以使用Bitnami的领事图像。它们提供流行应用程序的非根图像。

docker pull bitnami/consul:1.4.4 
  • https://github.com/bitnami/bitnami-docker-consul
  • https://hub.docker.com/r/bitnami/consul/tags

如果/consul 是 nfs 挂载,则可能是在服务器上设置了root_squashall_squash。这将导致 chown 操作失败,因为新文件/文件夹将自动提供给 nobody/nogroup。

如果可以更改共享(暂时(以使用no_root_squashno_all_squash,直到设置完所有文件,则应该没问题。由于该文件系统通常是持久的,因此只需要一次,因此之后您可以将其重置为root_squash并再次all_squash

最新更新