我在 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 中运行。
这几乎肯定与无法运行以 777 权限安装为 configmap 的 Bash 脚本中描述的问题相同
已挂载的脚本显示为 777 但无法执行。将
defaultMode
设置为 0755
或类似的值即可(我最近在做的一个项目中遇到了完全相同的问题)