这可能很简单,但是我似乎无法弄清楚为什么无法将安装为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容器的情况下包含脚本?
答案 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
的位置的另一个文件中,这样就可以运行该文件。
如果有人提出了更聪明的解决方案,我会将其标记为正确的答案。