kubernetes - 启动自定义 bash 脚本时出现权限问题

问题描述 投票:0回答:1

我在 Ubuntu 容器中启动 bash 脚本时遇到了问题,这导致我包含“bash”命令以在新的 bash shell 中启动脚本。原来的命令是:

command: ['sh', '-c', '/data/cleaner.sh']

但是,我遇到了“权限被拒绝”错误,提示我将命令修改为:

command: ['sh', '-c', 'bash /data/cleaner.sh']

权限问题在容器的输出中变得很明显。目录列表显示符号链接详细信息:

root@cleaner-58f6cd657-mzj5w:~# ls -l /data
total 0
lrwxrwxrwx 1 root root 17 Feb  6 18:45 cleaner.sh -> ..data/cleaner.sh

尝试直接执行脚本导致“权限被拒绝”错误:

root@cleaner-58f6cd657-mzj5w:~# /data/cleaner.sh
bash: /data/cleaner.sh: Permission denied

另一方面,使用修改后的命令解决了问题:

root@cleaner-58f6cd657-mzj5w:~# bash /data/cleaner.sh
Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
[...]

此外,这是 Kubernetes 清单,包括更正后的命令:

apiVersion: v1
kind: ConfigMap
metadata:
  name: cleaner-config
data:
  cleaner.sh: |-
    #!/bin/bash
    apt-get update
    apt-get install -y wget
    # some other commands...

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cleaner
spec: 
  selector:
    matchLabels:
      ver: one9      
  template:
    metadata:
      labels:
        ver: one9
    spec:
      containers:
        - name: kontener
          image: ubuntu:latest
          command: ['sh','-c', 'bash /data/cleaner.sh']
          volumeMounts:
          - name: config
            mountPath: "/data/"
      volumes:
        - name: config
          configMap:
            name: cleaner-config

我很好奇为什么该脚本没有在 sh shell 中启动,但它在 bash 中运行。

bash shell kubernetes sh
1个回答
0
投票

这几乎肯定与无法运行以 777 权限安装为 configmap 的 Bash 脚本中描述的问题相同

已挂载的脚本显示为 777 但无法执行。将

defaultMode
设置为
0755
或类似的值即可(我最近在做的一个项目中遇到了完全相同的问题)

© www.soinside.com 2019 - 2024. All rights reserved.