在kubernetes中运行Consul Docker映像作为非root用户

问题描述 投票:3回答:3

我想在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(当我在Docker本地启动它时曾经是用户consul,现在应该是root组中的成员)的领事。

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

chown: /consul/data: Operation not permitted

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

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

docker kubernetes consul
3个回答
3
投票

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

You can find the patch on GitHub.


0
投票

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

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


0
投票

如果有人在寻找解决方案。您还可以使用Bitnami的Consul图像。它们提供了流行应用程序的非root映像。

docker pull bitnami/consul:1.4.4 
© www.soinside.com 2019 - 2024. All rights reserved.