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

时间:2018-05-02 14:30:06

标签: docker kubernetes consul

我想在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用户启动容器吗?

3 个答案:

答案 0 :(得分:2)

我最后修复了Consuls $(document).ready(function() { $("#convert").click(function(){ var GardinerToUnicodeCodePoint = { "A1" :"995328", "A1A" :"995329", "A1B" :"995330", "A1C" :"995331", "A2" :"995332", "A2A" :"995333", "A3" :"995334", "A3A" :"995335", "A3B" :"995336", "A4" :"995337", "A4A" :"995338", "A4B" :"995339", "A4C" :"995340", "A4D" :"995341", "A4E" :"995342", "A5" :"995343", "A5A" :"995344", "A5B" :"995345", "A5C" :"995346", "A6" :"995347", }; var userInput = $("#userInput").val; /*for example 'A1'*/ if (userInput in GardinerToUnicodeCodePoint) { alert(/*value of key 'userInput' -> 995328*/); } else { alert("No code found!"); } }); }); ,在执行chown命令之前通过添加一些docker-entrypoint.sh测试来检查用户是否是root用户。

You can find the patch on GitHub.

答案 1 :(得分:0)

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

如果您可以暂时更改共享以使用no_root_squashno_all_squash,直到设置了所有文件,就可以了。由于该文件系统通常是持久性的,因此只需要一次,因此之后您可以将其重新设置为root_squashall_squash

答案 2 :(得分:0)

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

docker pull bitnami/consul:1.4.4