安装为具有777权限的configmap的Bash脚本无法运行

时间:2018-09-10 09:40:33

标签: kubernetes kubernetes-helm

这可能很简单,但是我似乎无法弄清楚为什么无法将安装为configmap的bash脚本作为root运行:

root@myPodId:/opt/nodejs-app# ls -alh /path/fileName 
lrwxrwxrwx 1 root root 18 Sep 10 09:33 /path/fileName  -> ..data/fileName

root@myPodId:/opt/nodejs-app# whoami
root

root@myPodId:/opt/nodejs-app# /bin/bash -c /path/fileName
/bin/bash: /path/fileName: Permission denied

我正在猜测,但是我认为与Docker一样,容器中的根不是实际的根,其工作方式更像是伪根帐户。

如果是这种情况,并且无法以这种方式运行文件,那么如何在每次脚本更改时都不必重新创建Docker容器的情况下包含脚本?

3 个答案:

答案 0 :(得分:1)

毫不奇怪,您无法运行安装为ConfigMap的脚本。资源本身的名称(ConfigMap)应该使您不使用它。 一种解决方法是,可以将脚本放入git仓库中,然后将EmptyDir挂载到使用git克隆仓库的InitContainer中,然后将EmptyDir挂载到Pod的容器中。 InitContainer会在容器创建期间每次下载最新版本

答案 1 :(得分:1)

请看这里:https://github.com/kubernetes/kubernetes/issues/71356#issuecomment-441169334

您需要将 ConfigMap 上的 defaultMode 设置为您要求的权限:

volumes:
- name: test-script
  configMap:
    name: test-script
    defaultMode: 0777

答案 2 :(得分:0)

好的,所以我没有指向文档的链接,但是configmap肯定安装在ReadOnly文件系统上。我想出的是,将文件的内容放在本地根可以写/usr/local的位置的另一个文件中,这样就可以运行该文件。

如果有人提出了更聪明的解决方案,我会将其标记为正确的答案。