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
这可能很简单,但我似乎无法弄清楚为什么 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