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

Bash script mounted as configmap with 777 permissions cannot be ran

这可能很简单,但我似乎无法弄清楚为什么 bash 作为 configmap 安装的脚本不能 运行 作为 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 容器?

好的,所以我没有指向文档的链接,但是配置映射肯定安装在只读文件系统上。我想出的是将文件的内容放到另一个文件中,在我的情况下本地根目录可以写入 /usr/local 的位置,这样文件可以是 运行.

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

您不能 运行 挂载为 ConfigMap 的脚本也就不足为奇了。资源本身的名称 (ConfigMap) 应该让您不要使用它。 作为解决方法,您可以将脚本放在某个 git 存储库中,然后将 EmptyDir 挂载到使用 git 克隆存储库的 InitContainer 中,然后将 EmptyDir 挂载到 Pod 的容器中。 InitContainer 每次创建容器时都会下载最新版本

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

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

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